#!/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」を取得するには、どの構文を使用する必要がありますか?
ここで、${!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
に割り当てたい場合は、zsh
でnumber=$numbers[4]
を実行するか、ksh
でnumber=${numbers[3]}
を実行します。 (そしてbash
配列をコピーしたばかりのksh
)。
あなたの問題はこれです:
number=numbers[3]
配列numbers
の4番目の要素を変数number
に割り当てていません。これは、numbers[3]
が実際には何も意味しないためです。
$ numbers=(53 8 12 9 784 69)
$ echo $numbers[3]
53[3]
配列の名前だけを変数として使用すると、実際に使用されているのは配列の最初の要素(53
)です。したがって、$numbers[3]
は53[3]
になります。あなたが欲しいものは:
$ number=${numbers[3]}
$ echo $number
9
変数を宣言するときは、$
を使用する必要はありませんが、使用するときは使用する必要があります。
したがって、このように割り当てるだけで、number=${numbers[3]}
で機能するはずです。