expr 가져오기: 인덱스에 구문 오류가 있습니다.

expr 가져오기: 인덱스에 구문 오류가 있습니다.

이것을 사용

OF=$(ps fax | grep 'php-fpm: master process' | awk '{print $1}')  
IDX=`expr index $OF ' '`

오류가 발생합니다. $OF 변수의 결과는 다음과 같습니다.

27797 27495

여기서 무슨 문제가 있습니까? 나는 이것이 변수가 표현식에 전달되는 방식과 관련이 있다고 생각합니다. 또한 $OF 변수 주위에 ' 따옴표를 추가해 보았으나 소용이 없었습니다. 찾을 수 없으면 0을 반환합니다.

답변1

pgrepgrep을 사용해야합니다프로세스 번호프로세스. 이것이 가장 안전한 방법입니다. 일부 시스템(이전 시스템)은 그렇지 않으므로 어쩔 pgrep수 없이 ps. ps귀하의 라인에서는 awk를 사용하여 이 모든 것을 처리할 수 있으므로 필요하지 않은 grepand를 사용합니다.awk

of=$(ps fax | awk '/[p]hp-fpm: master process/{print $1}') 

참고로. 일반 변수 이름에는 대문자를 사용하지 마십시오. 관례적으로 환경 변수는 대문자로 표시됩니다.

이 단계에서는 귀하의 변수가 $of저장됩니다 . 귀하의 질문이 불분명하므로 거기에서 무슨 일이 일어나고 있는지 php-fpm잘 모르겠습니다 .expr

답변2

당신은해야합니다큰따옴표:

IDX=`expr index "$OF" ' '`

따옴표가 없으면 expr명령은 다음과 같습니다.

expr index 27797 27495 ' '

이것은 말이 되지 않습니다. 작은따옴표를 사용하면 , 및 (공백 없이) expr로 구성된 3자의 긴 문자열을 전달합니다. 변수를 큰따옴표로 묶는 것은 거의 항상 좋은 생각입니다. 이는 값에 공백이나 기타 특수 문자가 포함될 수 있는 경우 매우 중요합니다.$OF

관련 정보