微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么匹配单个0时expr失败

如何解决为什么匹配单个0时expr失败

以下命令有效:

$ 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。