BASH:让构造((...))

时间:2014-01-07 21:38:44

标签: bash

任何人都可以解释以下内容吗?

1. (( 0 && 1 ))                 # Logical AND
echo $?     # 1     ***
# And so ...
2. let "num = (( 0 && 1 ))"
echo $num   # 0
# But ...
3. let "num = (( 0 && 1 ))"
echo $?     # 1     ***

如果1是1的退出代码,则2中的num不应包含相同的退出代码吗?

2 个答案:

答案 0 :(得分:2)

原因:退出状态与命令的输出不同。

  • 示例1:您正在查看命令的存在状态。
  • 示例2:您正在查看命令的输出。

答案 1 :(得分:1)

num未分配算术命令的退出代码。它的值为0 && 1;这里,双括号简单地被视为嵌套的子表达式。 let语句等同于

(( num = (( 0 && 1 )) ))

=运算符的RHS视为表达式,而不是语句。