基本的なBash配列の質問

基本的なBash配列の質問
#!/bin/bash
# query1.sh

numbers=(53 8 12 9 784 69)
echo ${numbers[3]} # <--- this echoes "9" to standard output.

number=numbers[3]
echo number # <--- this echoes "number" to stdout.
echo $number # <--- this echoes "numbers[3]" to stdout.
echo ... <--- ???

number名前付き変数をエコーし​​て「9」を標準出力として取得するには、どの構文を使用する必要がありますか?

答え1

あなたの質問は次のとおりです。

number=numbers[3]

配列の4番目の要素はnumbers変数に割り当てられませんnumbernumbers[3]実際には意味がないからです。

$ numbers=(53 8 12 9 784 69)
$ echo $numbers[3]
53[3]

配列名のみを変数として使用すると、実際に使用されるのは配列の最初の要素(53)です。だから$numbers[3]それは53[3]。あなたが望むもの:

$ number=${numbers[3]}
$ echo $number
9

答え2

${!var}変数間接参照に演算子を使用する必要がある場合は、次のようになります。

bash-4.4$ numbers=(53 8 12 9 784 69)
bash-4.4$ number=numbers[3]
bash-4.4$ echo "${!number}"
9

これに対応するzshものは次のとおりです。

numbers=(53 8 12 9 784 69)
number=numbers[4]
echo ${(P)number}

zsh配列の索引付けは、他のほとんどのシェルおよびシェルツールと同様に1から始まるため、これを使用しnumbers[4]て4番目の数字を取得できます)。

配列の4番目の要素の値をに割り当てる場合、またはで割り当てること$numberができます。これは配列をコピーするだけです。number=$numbers[4]zshnumber=${numbers[3]}kshbashksh

答え3

変数を宣言するときは必ずしも使用する必要はありませんが、使用する$ときは使用する必要があります。

これを割り当てるとうまくいきます。 number=${numbers[3]}

関連情報