我有一个bash脚本试图用参数调用pgrep(Over simplified):
PATTERN="'/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'"
pgrep -f $PATTERN
echo pgrep -f $PATTERN
提供以下输出:
Usage: pgrep [-cflvx] [-d DELIM] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]
[-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN]
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$'
我认为这意味着参数不会传递给pgrep,但由于某种原因传递给echo。
我期待的是:
7632
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$'
当我单独运行preg行时,它会按预期输出7632。
我在这里做错了吗?我试过sh,dash和bash。同样的结果,我真的没有看到问题。
答案 0 :(得分:3)
您需要用双引号括起 PATTERN :
PATTERN="/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$"
pgrep -f "$PATTERN"
编辑:并且为了回应我会这样做:
echo pgrep -f \'$PATTERN\'
答案 1 :(得分:2)
因为我没有可以测试的lighttpd.bin,所以我提交了一个未经测试的选项,主要是同意@barti_ddu,但是扭曲略有不同
PATTERN='/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'
pgrep -f "$PATTERN"
echo pgrep -f "$PATTERN"
我会保留对PATTERN的单引号,但完全同意在使用pgrep或echo时需要dbl引用。
我希望这会有所帮助。