2017-11-22 11 views
0

ため-n宣言し、私はdeclare -nで宣言された参照変数を使用していますか?のは、私はこのような何かをやってみたかったとしましょう:位置パラメータ以下のコードで

for ((i=$#; i>=1;i--)); do 
    a="${!i}" 
    echo "$a" 
done 

しかし、「簡略化」、パラメータ展開を必要とせず:

for ((i=$#; i>=1;i--)); do 
    declare -n a=$i 
    echo "$a" 
done 
+0

あなたはありますかより良いユースケース? 'のために'; echo "$ a"; doneはかなり単純です。 –

+0

「$ @」で 'for x 'だけをやりたいですか? echo "$ x";済んだ? –

+1

@PatrykObara、...もっと見ると、OPは反復しようとしています*後方に*。 –

答えて

2

Namerefsは位置パラメータを参照するために使用することはできません。

あなたは間接的な拡張のためのパラメータ展開構文を使用せずに、アウトオブオーダーあなたの引数を反復処理したい場合は、そのに数値-インデックス付きの配列とインデックスにそれらをダンプ考慮は:

args=("$0" "[email protected]") 
for ((i=$#; i<=1; i--)); do 
    echo "${args[$i]}" 
done 
+0

これについて考えてみると、 'eval 'a = $'" $ i "' – PesaThe

+0

のような素晴らしい構造を使うこともできます。 'eval'は選択肢が実用的でない場合にのみ許容される方法とみなされます。 http://mywiki.wooledge.org/BashFAQ/048も参照してください。 –

関連する問題