#!/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
変数に割り当てられません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
答え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]
zsh
number=${numbers[3]}
ksh
bash
ksh
答え3
変数を宣言するときは必ずしも使用する必要はありませんが、使用する$
ときは使用する必要があります。
これを割り当てるとうまくいきます。
number=${numbers[3]}