BASH脚本:当索引是变量时,$ @的第n个参数?

时间:2012-05-25 07:05:47

标签: bash shell argv

我想检索$ @的第n个参数(传递给脚本的命令行参数列表),其中n存储在变量中。

我尝试了$ {$ n}。

例如,我想获取调用的第二个命令行参数:

./my_script.sh alpha beta gamma

索引不应该是显式的,而是存储在变量n。

源码:

n=2
echo ${$n}

我希望输出为“beta”,但我收到错误:

./my_script.sh: line 2: ${$n}: bad substitution

我做错了什么?

5 个答案:

答案 0 :(得分:32)

您可以使用变量间接。它独立于数组,在您的示例中工作正常:

n=2
echo "${!n}"

编辑: 变量间接可以在很多情况下使用。如果存在变量foobar,则以下两个变量扩展会产生相同的结果:

$foobar

name=foobar
${!name}

答案 1 :(得分:10)

试试这个:

#!/bin/bash
args=("$@")
echo ${args[1]}

好的替换" 1"用一些$ n或者其他东西......

答案 2 :(得分:7)

以下也适用:

#!/bin/bash
n=2
echo ${@:$n:1}

答案 3 :(得分:3)

便携式(非特定于bash)的解决方案是

$ set a b c d
$ n=2
$ eval echo \${$n}
b

答案 4 :(得分:2)

eval可以帮助您间接访问变量,这意味着要对表达式进行两次计算。

你可以这样做eval alph=\$$n; echo $alph