我有一个bash脚本,它尝试使用参数调用pgrep (通过简化):
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。同样的结果,我真的看不出有什么问题。
发布于 2012-02-21 00:44:30
您需要用双引号将PATTERN括起来:
PATTERN="/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$"
pgrep -f "$PATTERN"请参阅:quoting variables
编辑:对于回显,我只需要这样做:
echo pgrep -f \'$PATTERN\'发布于 2012-02-21 01:04:08
因为我没有lighttpd.bin可用来测试,所以我提交了一个未经测试的选项,基本上同意@barti_ddu,但有一点不同
PATTERN='/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'
pgrep -f "$PATTERN"
echo pgrep -f "$PATTERN"我会在模式的赋值上保留单引号,但完全同意在使用pgrep或echo时需要dbl-quoting。
我希望这能帮到你。
https://stackoverflow.com/questions/9364676
复制相似问题