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

标签 linux bash

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

$(($RANDOM % 10 +1))

我试过了,效果很好。

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

最佳答案

没有。 %+ 具有更高的优先级(与 * 相同),因此未加括号的版本等同于已显式加括号的版本。


我最初错过了第二个也使用 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?

关于linux - $(($RANDOM % 10 +1)) 和 $(( ( RANDOM % 10 ) + 1 )) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54676347/

相关文章:

windows - 为什么 Windows 和 Linux 托管服务之间的价格差异如此之大

java - 如何在 Linux 环境中以编程方式突出显示(或选择)文件(或文件夹)(使用 java)

linux - Bash:将键值行转换为 CSV 格式

ruby - 从 FaSTLane 将环境变量传递给 shell 脚本

bash - 让 grep 在找到匹配项时提前退出

bash - 遍历在 awk 中共享一个字段的行

c - umount 是否异步释放底层设备?

linux - linux 中的 Probe() 方法是否需要重入?

linux - 在 linux 中使用带有多个变量的 if 参数删除文件

从 STDIN 读取时,Bash 防止符号扩展