小编zra*_*ajm的帖子

所有 POSIX shell 都以相同的方式实现算术扩展 $((...)) 吗?

我正在尝试编写一个可以在任何 POSIX shell 下工作的 shell 脚本,并且我发现了dash. 我想知道这是否是我可以在其他 POSIX 兼容 shell 下工作的依赖,或者它是否只是 shell 的一个无意的功能dash

\n\n

在算术扩展中,变量可以带有或不带有初始美元符号(位置参数除外,它必须始终带有美元符号$1,,$2

\n\n

但我发现 的行为有所"$((X))"不同,因为"$(($X))""$(($X))"似乎扩展了两次,而不是仅仅一次。即,如果我的变量X包含另一个变量的名称( X=Y),而该变量又包含一个数值 ( Y=1),"$(($X))"则将返回1,而"$((X))"只会产生“非法数字:Y”错误。

\n\n

我可以相信这种行为在其他 POSIX shell 中是相同的吗?

\n\n

奇怪的行为

\n\n

"$((X))"并且"$(($X))"行为不一样。

\n\n
$ X=Y; Y=1\n$ echo "$((X))"\ndash: 1: Illegal number: Y\n$ echo "$(($X))"\n1\n
Run Code Online (Sandbox Code Playgroud)\n\n

预期行为

\n\n

为了完整起见,我在这里包括了没有间接和两层间接的内容。没有间接的情况下,一切都按预期工作:

\n\n
$ X=1\n$ …
Run Code Online (Sandbox Code Playgroud)

dash posix

2
推荐指数
1
解决办法
1125
查看次数

标签 统计

dash ×1

posix ×1