Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 我应该使用$(())来计算ksh中的算术表达式吗?_Unix_Ksh - Fatal编程技术网

Unix 我应该使用$(())来计算ksh中的算术表达式吗?

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 &

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风格。