function f(){ i=1; echo "${!i}" ; }
f a b
输出:a
function f(){ i=1; echo "${!((i+1))}" ; }
f a b
输出:bash: ${!((i+1))}: bad substitution
,我想要的输出是b
什么是正确的语法?
答案 0 :(得分:3)
看起来Bash不允许在变量间接中使用表达式。如何在括号扩展中使用它之前递增i
的值,如下所示:
function f() { i=2; echo "${!i}"; }
来自Bash手册:
$ {!prefix *} $ {!prefix @}
扩展为名称以prefix开头的变量的名称,由IFS特殊变量的第一个字符分隔。当使用“@”并且扩展名出现在双引号内时,每个变量名称都会扩展为单独的单词。
答案 1 :(得分:3)
补充codeforester's helpful answer:
如果您只需要访问函数中的位置参数,则可以使用数组语法来提取感兴趣的参数;数组切片语法 支持算术表达式:
> function f(){ i=1; echo "${@: i+1 : 1}" ; }; f a b
b