问题描述
以下命令有效:
$ expr 1 : '\(.\)' || echo fail
1
当尝试匹配字符串“ 0”时,命令失败,例如$? == 1:
$ expr 0 : '\(.\)' || echo fail
fail
手册页上显示:
如果EXPRESSION既不为null也不为0,则退出状态为0
但是,由于匹配的字符串为0,所以返回退出状态1是没有意义的。
解决方法
expr
的退出状态取决于返回的字符串,而不是产生该字符串的操作。
The expr utility exits with one of the following values: 0 the expression is neither an empty string nor 0. 1 the expression is an empty string or 0. 2 the expression is invalid.
由于返回的字符串为0,所以退出状态为1。
是否使用成功的正则表达式匹配或其他运算符产生0都不重要。
$ expr 3 - 3 || echo "fail"
0
fail
,
expr似乎将0
评估为错误情况:
$ expr 1
$ echo $?
0
$ expr 0
$ echo $?
1