【发布时间】:2013-09-09 18:46:29
【问题描述】:
分配给var=foo 之类的变量和使用let var=foo 之类的let 有什么区别?还是var=${var}bar 和let var+=bar 之类的情况?每种方法的优缺点是什么?
【问题讨论】:
分配给var=foo 之类的变量和使用let var=foo 之类的let 有什么区别?还是var=${var}bar 和let var+=bar 之类的情况?每种方法的优缺点是什么?
【问题讨论】:
let 与(( )) 完全一样,它用于算术表达式。在let 和(( )) 之间有almost no difference。
您的示例无效。 var=${var}bar 要将单词bar 添加到var 变量(这是一个字符串操作),let var+=bar 不会起作用,因为它不是算术表达式:
$ var='5'; let var+=bar; echo "$var"
5
其实是算术表达式,如果只设置变量bar,否则bar被视为零。
$ var='5'; bar=2; let var+=bar; echo "$var"
7
【讨论】:
let 允许某种程度的间接:a=b; b=3; let $a+=1; echo $b;。 let 的参数在被评估之前会进行参数扩展(我认为我在您发布的链接中没有提到)。
a=b; b=3 之后,(( a+=1 )) 和(( $a+=1 )) 这两个命令是等价的,但事实并非如此。第一个似乎将a 替换为b 的值,然后递增,保持b 的值不变。第二个增量b,同时将a 设置为字符串b。