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

12 bash shell argv

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

我试过$ {$ n}.

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

./my_script.sh alpha beta gamma
Run Code Online (Sandbox Code Playgroud)

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

源代码:

n=2
echo ${$n}
Run Code Online (Sandbox Code Playgroud)

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

./my_script.sh: line 2: ${$n}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

nos*_*sid 32

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

n=2
echo "${!n}"
Run Code Online (Sandbox Code Playgroud)

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

$foobar

name=foobar
${!name}
Run Code Online (Sandbox Code Playgroud)


kon*_*nqi 11

试试这个:

#!/bin/bash
args=("$@")
echo ${args[1]}
Run Code Online (Sandbox Code Playgroud)

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


Smi*_*Smi 8

以下也适用:

#!/bin/bash
n=2
echo ${@:$n:1}
Run Code Online (Sandbox Code Playgroud)


Jen*_*ens 5

可移植的(非 bash 特定的)解决方案是

$ set a b c d
$ n=2
$ eval echo \${$n}
b
Run Code Online (Sandbox Code Playgroud)