首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash脚本/pgrep未按预期工作

bash脚本/pgrep未按预期工作
EN

Stack Overflow用户
提问于 2012-02-21 00:32:59
回答 2查看 6K关注 0票数 2

我有一个bash脚本,它尝试使用参数调用pgrep (通过简化):

代码语言:javascript
复制
PATTERN="'/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'"
pgrep -f $PATTERN
echo pgrep -f $PATTERN

提供以下输出:

代码语言:javascript
复制
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。

我所期待的:

代码语言:javascript
复制
7632
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$'

当我单独运行preg行时,它会像预期的那样输出7632。

我是不是做错了什么?我尝试过sh、dash和bash。同样的结果,我真的看不出有什么问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-21 00:44:30

您需要用双引号将PATTERN括起来:

代码语言:javascript
复制
PATTERN="/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$"
pgrep -f "$PATTERN"

请参阅:quoting variables

编辑:对于回显,我只需要这样做:

代码语言:javascript
复制
echo pgrep -f \'$PATTERN\'
票数 3
EN

Stack Overflow用户

发布于 2012-02-21 01:04:08

因为我没有lighttpd.bin可用来测试,所以我提交了一个未经测试的选项,基本上同意@barti_ddu,但有一点不同

代码语言:javascript
复制
PATTERN='/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'
pgrep  -f "$PATTERN"
echo pgrep  -f "$PATTERN"

我会在模式的赋值上保留单引号,但完全同意在使用pgrep或echo时需要dbl-quoting。

我希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9364676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档