bash脚本变量替换问题

时间:2021-02-28 18:11:32

标签: bash

我正在编写一个需要检查程序是否正在运行的 bash 脚本。该脚本使用参数 $1 来确定要查找的程序并将其传递给 pgrep 命令。

所以,在我的脚本 test.sh 中有一行:

>>> gender_to_binary = dict(m=1, male=1, f=0, female=0)
>>> [gender_to_binary[x.lower()] for x in gen if x.lower() in gender_to_binary]
[0, 1, 0, 1, 1, 0, 1, 1, 1, 0]

假设我有一个程序 mypgrm 正在运行,它的 PID 是 100。如果我运行“test.sh mypgrm”,我希望它输出 100

而是输出正在运行的 test.sh 的 PID

我可以看出脚本知道 $1 包含“mypgrm”

但是,如果我将 test.sh 中的行更改为:

pgrep -f $1

它确实输出 100 正如预期的那样。

我试过 pgrep -f "$1",但也不管用。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

发生这种情况是因为当时您的脚本也在运行它 其名称中包含 mypgrm,如下所示:

bash ./test.sh mypgrm

因此由 pgrep -f 报告。您可以将其过滤掉,例如 那个:

pgrep -f "$1" | grep -v "^$$\$"

或者使用一个小技巧并以这样的形式传递程序的名称 pgrep 将不可见:

./test.sh '[m]ypgrm'
相关问题