【发布时间】:2020-01-15 20:34:50
【问题描述】:
for i in {1..99}
do
if ([ $((i % 2)) -eq 1 ])
then
echo $i
fi
done
我正在学习 bash,并试图更好地理解第 3 行。为什么 $((i % 2)) 必须用括号括起来,为什么我不能将 $ 符号放在 @ 旁边987654324@点赞:
([ (($i % 2)) -eq 1 ])
或
([ ($(i % 2)) -eq 1 ])
?
【问题讨论】:
-
单括号用于在子shell中执行命令。
-
使用
if ([ ... ])很奇怪。不需要外括号。 -
一般来说,shell 语法非常 依赖于上下文。您可以在
$(( ))(以及其他一些“算术”上下文)中使用的语法与您可以在其他地方使用的语法大不相同。 -
正如 Barmar 所说,单括号用于在子 shell 中执行命令,并且有助于将命令的输出存储在 vars 中,例如
var=$(ls /home)如果你想做一些数学运算,你应该使用双$((a+b))或正方形$[a+b]你实际上可以把$放在里面,但这里是多余的。 if 之后的测试语句应该放在单方括号或双(更好)方括号中。