请重新打开。这不是重复的,因为在这里我问为什么它不起作用,而不仅仅是为了解决方法。
Bash 手册说
波形符扩展,参数和变量扩展,算术展开和命令替换(以从左到右的方式完成)
如果我明白的话http://unix.stackexchange.com/a/270324/674正确地,“从左到右”意味着“大括号扩展、波形符扩展、参数和变量扩展、算术扩展和命令替换”具有相同的优先级。
那么是否可以在参数扩展中使用算术扩展呢? (即一级递归)
如果不是,那么考虑到“波形符扩展、参数和变量扩展、算术扩展和命令替换(以从左到右的方式完成)”,为什么算术扩展不能在参数扩展中工作?
如果是,怎么办?
例如,
$ set hello world
$ echo $2
world
$ echo ${$((1+1))}
bash: ${$((1+1))}: bad substitution
我希望
- 首先扩展
$((1+1))
到${$((1+1))}
.2
和 - 然后
${2}
到world
.
谢谢。
答案1
eval
为此,您需要或 间接:
eval echo \${$((1+1))}
index=$((1+1))
echo ${!index}