我尝试找到一个包含术语“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工作正常。
答案 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