【发布时间】:2020-05-27 00:49:30
【问题描述】:
这个问题是Bash conditional based on exit code of command 的后续问题。
我了解并已使用该问题的公认答案:
$ cat ./txt
foo
bar
baz
$ if ! grep -Fx bax txt &>/dev/null; then echo "not found"; fi
not found
$
但我不知道用什么语法来实现一个看似简单的前提:如何为命令的特定退出代码编写条件?
This post 指出grep 可能会失败,错误代码 > 1;所以我想在grep返回错误代码1的情况下写上面的条件来打印“未找到”。我该如何写这样的语句?以下似乎不起作用(我显然在挣扎):
$ # Sanity-check that grep really fails with error code 1:
$ grep -Fx bax txt &>/dev/null
$ echo $?
1
$
$
$ if grep -Fx bax txt &>/dev/null -eq 1; then echo "not found"; fi
$ if grep -Fx bax txt &>/dev/null == 1; then echo "not found"; fi
$ if grep -Fx bax txt &>/dev/null = 1; then echo "not found"; fi
$ if [ grep -Fx bax txt &>/dev/null -eq 1 ]; then echo "not found"; fi
$ if [ grep -Fx bax txt &>/dev/null == 1 ]; then echo "not found"; fi
$ if [ grep -Fx bax txt &>/dev/null = 1 ]; then echo "not found"; fi
$
注意:我特别想避免先运行命令,然后在条件中使用$?,原因已在第一个注明的帖子的接受答案中指出。
【问题讨论】:
-
grep -Fqx bax txt; (($? == 1)) && echo not found -
虽然您发布的代码没有任何问题,但如果
$?的值不为零,则它会执行回显,这意味着错误,因为如果出现以下情况,则不需要测试$?的值您只对1作为值感兴趣。
标签: bash conditional-statements