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やむを得ずpspsあなたの行では、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

関連情報