获取 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您应该考虑以下事项。您的行使用了grepand ,awk这不是必需的,因为您可以使用 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组成的三字符长字符串。将变量放在双引号中几乎总是一个好主意 - 当值可能包含空格或任何其他特殊字符时,这一点至关重要。$OF

相关内容