我想检索$ @的第n个参数(传递给脚本的命令行参数列表),其中n存储在变量中。
我尝试了$ {$ n}。
例如,我想获取调用的第二个命令行参数:
./my_script.sh alpha beta gamma
索引不应该是显式的,而是存储在变量n。
中源码:
n=2
echo ${$n}
我希望输出为“beta”,但我收到错误:
./my_script.sh: line 2: ${$n}: bad substitution
我做错了什么?
答案 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