有没有办法使用变量来获取指定的参数?

时间:2017-03-23 04:39:32

标签: linux bash

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

什么是正确的语法?

2 个答案:

答案 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