2012-03-19 10 views
2

私は物事の仕組みを理解しようとしているのbash-スクリプティング&に新しいです。それはすべて少し奇妙だ...次バッシュ・スクリプトアレイ

は、スクリプトの中に入れたり、シェルに入力することができます。

declare -a A=("foo" "bar") 
B=1 
[ ${A[B]} == ${A[$B]} ] && echo "wTF" || echo ";)" 

これは私に私のDebianスクイズcygwinの上でも&の「WTF」を与えます1.7.11- 1

Soが${A[B]}はなぜ機能しますか?

+1

@OliCharlesworth:私は私たちの最後の出会いの後にあなたと議論するよりも優れて学んできたはずです!それでも、私はbashが好きです。それは大好きです。 – thb

+0

@thb:それぞれ自分で!しかし、IMOは、動作するために実行可能ファイルになることを要求する言語は、嫌な言葉です。 –

+0

笑。 bash> dos – violet313

答えて

4

the Bash Reference Manual, §6.7 "Arrays"より:

インデックス配列は([…]算術式を含む)の整数を使用して参照され、ゼロベースれます。 […] ¶ 添字はゼロ以上の数に評価されなければならない演算式として扱われます。

したがって、${A[B]}${A[$((B))]}を意味します。これは、${A[B-1]}のようなものが必要なときに便利です。

算術式は、部分的に言った、§6.5 "Shell Arithmetic"で説明されている:式内

は、シェル変数は、名前によって参照することができるパラメータ拡張構文を使用せず。だから、

$((B))$(($B))(前者は例えば初期化されていない変数のデフォルトとしてゼロの代わりに空白を使用して、いくつかの点についてよりスマートであることを除いて)を意味します。

+0

@downvoter:理由を説明する気に? – ruakh

+0

OK!ありがとう...;) – violet313

0

A作品同じ理由:parameter expansionsubstitution

+0

Ok。私はそれを読む。私はまだそれを取得しません。次の間接参照を使用するとします。 'C = B; echo "$ {A [$ C]}"; echo "$ {$ C}" '? – violet313