我想检索 $@ 的第 n 个参数(传递给脚本的命令行参数列表),其中 n 存储在一个变量中。
我试过 ${$n}。
例如,我想获取调用的第二个命令行参数:
./my_script.sh alpha beta gamma
并且索引不应该是显式的,而是存储在变量 n 中。
源代码:
n=2
echo ${$n}
我希望输出为“beta”,但我收到错误:
./my_script.sh: line 2: ${$n}: bad substitution
我究竟做错了什么?
您可以使用变量间接。它独立于数组,并且在您的示例中可以正常工作:
n=2
echo "${!n}"
编辑: 变量间接可以在很多情况下使用。如果存在变量foobar,则以下两个变量展开会产生相同的结果:
$foobar
name=foobar
${!name}
试试这个:
#!/bin/bash
args=("$@")
echo ${args[1]}
好的,用一些 $n 或其他东西替换“1”...
以下也有效:
#!/bin/bash
n=2
echo ${@:$n:1}
便携式(非 bash 特定)解决方案是
$ set a b c d
$ n=2
$ eval echo \${$n}
b
eval可以帮助您间接访问变量,这意味着对表达式求值两次。
你可以这样做eval alph=\$$n; echo $alph