Unix 我应该使用$(())来计算ksh中的算术表达式吗?
1) 如果我对整数进行运算,我应该使用$(())吗Unix 我应该使用$(())来计算ksh中的算术表达式吗?,unix,ksh,Unix,Ksh,1) 如果我对整数进行运算,我应该使用$(())吗 >typeset -i x=0 >typeset -i y=0 >typeset -i z=0 >y=$(($x+1)) >print $y 1 >z=$x+1 >print $z 1 如您所见,z和y中都有正确的结果。 仅在变量未声明为整数的情况下存在差异: >typeset j >typeset k >j=$(($x+1)) >print $j 1 >k=$x+1 &
>typeset -i x=0
>typeset -i y=0
>typeset -i z=0
>y=$(($x+1))
>print $y
1
>z=$x+1
>print $z
1
如您所见,z和y中都有正确的结果。仅在变量未声明为整数的情况下存在差异:
>typeset j
>typeset k
>j=$(($x+1))
>print $j
1
>k=$x+1
>print $k
0+1
2) 美元($x+1))和美元($x+1))之间有什么区别
打印$($x+1))1
打印$((x+1))
一, let也有同样的情况: x=1
设x=$x+1
打印$x
2
设x=x+1
打印$x
三, 2) 在计算$(())之前展开$x:
x=1+
echo $(($x 1))
=>2
echo $((x 1))
=>syntax error when trying to make an operand from "1+"
2) 使用$(..)
中的$x
展开,可以以文本方式构造表达式:
NUM1=3
NUM2=5
NUM3=7
for OP1 in + - \* /; do
for OP2 in + - \* /; do
echo $((NUM1 $OP1 NUM2 $OP2 NUM3));
done
done
显然,它不适用于$((NUM1 OP1 NUM2))
等
另一种可能性(不带$
)可用于修改变量:
X=0
Y=1
echo $((Y << (++X))) # prints 2, which is 1 << 1; increments X
echo $X # prints 1
X=0
Y=1
echo$((Y)
1) 如果我对整数进行运算,我应该使用$(())吗
与编程中的大多数事情一样,“这取决于”。如果您认为您的代码将在只有bourne shell的旧unix系统上使用,那么这种语法将不起作用
如果您将始终处于一个完全现代的环境中,那么$(…)
语法非常有意义,因为它允许使用简洁且类似于“C语言”的表达式
另外,正如其他人指出的,对于$(…)
中的任何数值变量,可以保存键入并删除前导“$”;-)
2) 美元($x+1))和美元($x+1))之间有什么区别
如前一段所述,除了必须少键入1个字符外,没有任何区别
最后,我赞扬你自己解决问题的方法。你们的小测试帮助你们自己证明了这些事实,这是一种方法,我希望更多关于S.O的问题海报能够学会使用!;-)
在理解如何提高shell知识方面,您走上了正确的道路。如果您不知道shell中可用的各种调试工具,请参阅中的第3段,即set-vx
和PS4=…
我希望这能有所帮助。将z=$x+1
写成((z=x+1))
是一种很好的Korn Shell风格。