2012-05-25 23 views
10

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

私は$ {$ n}を試しました。例えば

、私は、呼び出しの第二のコマンドラインパラメータを取得したい:

​​

を、インデックスが明示が、変数nに保存されてはなりません。

ソースコード:

n=2 
echo ${$n} 

私は、出力が "ベータ" であることを期待するが、私はエラーを取得:

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

は私が間違って何をしているのですか?

+1

はこれが重複しています。同じ質問:http://stackoverflow.com/questions/1497811/how-to-get-the-nth-positional-argument-in-bash –

答えて

8

はこれを試してみてください:

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

大丈夫、いくつかの$ nまたは何かを「1」に置き換えます...

27

可変インダイレクションを使用できます。これは、配列の独立しており、あなたの例では正常に動作します:

n=2 
echo "${!n}" 

編集:変数間接は、状況の多くで使用することができます。変数foobarがある場合は、次の二つの変数の展開は、同じ結果を生成:

$foobar 

name=foobar 
${!name} 
+0

ありがとうございました。私はこれもうまくいくと確信していますが、私は理由を理解していません。なぜ「配列とは関係がありませんか?」 $ @はリストではありません(配列ではありません)? –

+0

@gojira私は、nosidが作っている点は、引数のリストを別々にコピーする必要がなく、可変インダイレクションを使って参照できることです。 –

+1

@gojira: '$ @ 'は配列のようなものです。この答えの '$ {!n}'は、 'n 'が2のとき' $ 2'と解釈されます。 –

3

ポータブル(非bashの特定)溶液

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

@gojira:[セキュリティの影響](http://mywiki.wooledge.org/ BashFAQ/048)。 –

2

evalあります変数に間接的にアクセスするのに役立ちます。これは、式を2度評価することを意味します。あなたはこのeval alph=\$$n; echo $alph

6

のように次の操作を行うことができます

はあまりにも動作します:

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

nの前のドル記号は省略できます。 –

関連する問題