$((($ RANDOM%10 +1))和$((((RANDOM%10)+ 1)))有什么区别

时间:2019-02-13 17:41:30

标签: linux bash

因此,我尝试创建一个随机数,将范围限制在1到10之间。两者之间的语法略有不同,我不知道它们之间是否有任何区别。

$(($RANDOM % 10 +1))

我试过了,它工作正常。

$(( ( RANDOM % 10 ) + 1 ))。在RANDOM % 10+1之间包含一个额外的()似乎与上面的代码相同。但是它只有一个$而不是2。

1 个答案:

答案 0 :(得分:6)

什么都没有。 %的优先级(与*相同)比+高,因此未加括号的版本等同于带有明显括号的版本。


我最初是想第二个也使用RANDOM而不是$RANDOM。在算术上下文中,字符串被视为标识符,并(递归)扩展,直到获得整数为止。如果在任何时候该字符串都不是已定义的参数,则使用值0代替。例如:

$ foo=bar
$ bar=6
$ echo $((bar))
6
$ echo $((foo))
6

在最后一种情况下,$foo扩展为bar,后者扩展为6。

IMO,最好使用显式扩展。如果由于输入错误而未设置该参数,则会收到一个明确的错误

$ foo=6
$ echo $((10 + $fo))
bash: 10 + : syntax error: operand expected (error token is "+ ")

而不是无意的“成功”

$ echo $((10 + fo))
10  # ?? Why not 16?