ノート

ノート

2つの配列があります。

arrayA=(1 2 3)
arrayB=(a b c)

コマンドライン引数を使用してそのうちの1つを印刷したいと思います。つまり、if else

成功せずにいくつかの構文のバリエーションを試しました。私はこのようなことをしたい:

ARG="$1"

echo ${array${ARG}[@]}

ただし、「無効な置換」エラーが発生します。この目標をどのように達成できますか?

ベストアンサー1

この試み:

$ arrayA=(1 2 3)
$ x=A
$ var=array$x[@]
$ echo ${!var}
1 2 3

ノート

  • (パラメータ拡張)からman bash
    ${parameter}
           The value of parameter is substituted.
 The braces are required when parameter is a positional parameter with
  more than one

数字または引数の後に名前の一部として解釈されない文字が続く場合。
*パラメータの最初の文字が感嘆符(!)の場合、1段階の変数間接アドレッシングが導入されます。 Bash は、残りの引数で構成される変数値を変数名として使用します。次に、その変数を展開し、引数自体の値ではなく、残りの置換にその値を使用します。これを間接拡張といいます。 *下記の${!prefix*}と${!name[@]}の拡張は例外です。感嘆符は、間接的な関係を紹介するために開く中括弧の直後になければなりません。

おすすめ記事