检查是否在Bash/Linux中

检查是否在Bash/Linux中,bash,Bash,我对这种情况有问题: echo ${0##*/} # result: bady my if: if [[ "$(pgrep -c "${0##*/}")" -eq 1 ]]... check OK! edit if: if [[ "$(pgrep -c "bady")" -eq 1 ]]... check problem! 为什么?如果有双引号,请更改为: if [[ "$(pgrep -c bady)" -eq 1 ]] 试试这个: if (( $(pgrep -c bady) ==

我对这种情况有问题:

echo ${0##*/} # result: bady

my if: if [[ "$(pgrep -c "${0##*/}")" -eq 1 ]]... check OK!

edit if: if [[ "$(pgrep -c "bady")" -eq 1 ]]... check problem!

为什么?

如果有双引号,请更改为:

if [[ "$(pgrep -c bady)" -eq 1 ]]
试试这个:

if (( $(pgrep -c bady) == 1 ))
不需要引用整数


注意:
(…)
是一个算术命令,如果表达式为非零,则返回0的退出状态;如果表达式为零,则返回1的退出状态。如果需要副作用(作业),也可用作“let”的同义词。参见

您真的在乎计数是1,还是只需要区分“匹配”和“不匹配”,而计数恰好是1?您只需检查
pgrep
的退出状态,查看是否发生匹配:

if pgrep "${0##*/}"; then