2

以下命令有效:

$ expr 1 : '\(.\)' || echo fail
1

当尝试匹配字符串“0”时,命令失败,例如 $? == 1:

$ expr 0 : '\(.\)' || echo fail
fail

手册页说:

如果 EXPRESSION 既不为空也不为 0,则退出状态为 0

但是,因为匹配字符串为 0 而返回退出状态 1 是没有意义的。

4

2 回答 2

2

的退出状态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
于 2020-09-07T17:40:49.250 回答
0

看起来 expr 只是评估0为错误情况:

$ expr 1
$ echo $?
0

$ expr 0
$ echo $?
1
于 2020-09-07T17:41:02.477 回答