pgrep -f有多个参数

时间:2013-02-12 16:45:05

标签: regex bash shell grep

我尝试找到一个包含术语“someWord”的特定流程,以及另外两个由$ 1和$ 2表示的术语

 7   regex="someWord.*$1.*$2"
 8   echo "$regex"
 9   [ `pgrep -f $regex` ] && return 1 || return 0

返回

./test.sh foo bar
someWord.*foo bar.*
./test.sh: line 9: [: too many arguments

我的正则表达式会怎样?直接在shell中执行该pgrep工作正常。

3 个答案:

答案 0 :(得分:8)

好先生,也许是这个

[[ `pgrep -f "$regex"` ]] && return 1 || return 0

或者

[ "`pgrep -f '$regex'`" ] && return 1 || return 0

答案 1 :(得分:1)

首先,没有理由将pgrep命令包装在任何内容中。只需使用退出状态:

pgrep -f "$regex" && return 1 || return 0.

如果pgrep成功,你将返回1;否则,您将返回0.但是,您所做的只是撤消预期的退出代码。您可能想要做的只是让pgrep成为您函数的最后一个陈述;然后pgrep的退出代码将是您函数的退出代码。

something () {
   ...
   regex="someWord.*$1.*$2"
   echo "$regex"
   pgrep -f $regex
}

答案 2 :(得分:0)

如果您真的想要做某事,以防您的命令返回错误:

cmd="pgrep -f $regex"

if ! $cmd; then
  echo "cmd failed."
else
  echo "ok."
fi