17

$@ の n 番目のパラメーター (スクリプトに渡されるコマンド ライン パラメーターのリスト) を取得したいと考えています。ここで、n は変数に格納されています。

${$n} してみました。

たとえば、呼び出しの 2 番目のコマンド ライン パラメーターを取得したいとします。

./my_script.sh alpha beta gamma

また、インデックスは明示的ではなく、変数 n に格納する必要があります。

ソースコード:

n=2
echo ${$n}

出力は「ベータ版」になると思いますが、次のエラーが表示されます。

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

私は何を間違っていますか?

4

5 に答える 5

36

変数 indirectionを使用できます。それは配列とは無関係であり、あなたの例ではうまく動作します:

n=2
echo "${!n}"

編集: 可変インダイレクションは、多くの状況で使用できます。variable がある場合foobar、次の 2 つの変数展開は同じ結果を生成します。

$foobar

name=foobar
${!name}
于 2012-05-25T07:12:14.597 に答える
14

これを試して:

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

「1」をいくつかの $n または何かに置き換えてください...

于 2012-05-25T07:14:09.700 に答える
9

以下も機能します。

#!/bin/bash
n=2
echo ${@:$n:1}
于 2012-05-25T07:19:07.360 に答える
4

移植可能な (非 bash 固有の) ソリューションは次のとおりです。

$ set a b c d
$ n=2
$ eval echo \${$n}
b
于 2012-05-25T07:16:14.150 に答える
2

eval変数に間接的にアクセスするのに役立ちます。つまり、式を 2 回評価します。

あなたはこのようにすることができますeval alph=\$$n; echo $alph

于 2012-05-25T07:18:14.160 に答える