【发布时间】:2011-02-08 16:50:49
【问题描述】:
我是 bash 脚本的新手,我一直在学习我正在进行的一个小项目。但是,我遇到了一个似乎无法解决的问题。
我有一个变量需要包含在命令中。当直接在 shell 中运行时(手动输入变量),该命令返回预期的结果。但是,在使用变量时我无法让它工作。
所以,如果我手动运行它,它会正确返回 0 或 1,具体取决于它是否正在运行。
ps -ef | grep -v grep | grep -c ProcessName
但是,当我尝试将它嵌入到这个 while 子句中时,它总是评估为 0,因为它没有搜索正确的文本。
while [ `ps -ef | grep -v grep | grep -c {$1}` -ne 0 ]
do
sleep 5
done
有没有办法可以做到这一点?我尝试了无数种不同的方法都无济于事。我也尝试使用 $() 语法进行命令替换,但我也没有运气。
谢谢!
【问题讨论】:
-
为什么你的while循环的测试中有大括号,但你的例子中没有? $1 的值是否正确?
-
我将大括号放在 while 循环中,因为我认为我需要它们来表示变量。这可能是不正确的,但删除它们并不能解决我的问题。是的,$1 具有正确的值。我在while语句之前添加了
echo $1,它是正确的。 -
如果您需要使用花括号,美元符号放在开头的前面,并且引用它也是一个好主意:
"${1}"。请参阅Process Management 了解一些有用的信息。 -
您可能还想查看parameter expansion section of the bash man page。结果是
$var和${var}一样;后者适用于${var}_suffix之类的情况,因为$var_suffix将被解释为${var_suffix}。正如丹尼斯所说,$永远是第一位的。