4

パラメーター展開は、パラメーター${parameter,,pattern}内の英字を小文字に変換します。

cygwin 1.7.11-1 Bash 4.1.10(4)と、私のdebian squeeze Bash 4.1.5(1) ;
次のコマンドを実行すると、奇妙な結果が得られます。

$ declare -a a=(Zero One Two Three); n=0; echo "${a[n],,}->${n}"; echo "${a[++n]}->${n}"; echo "${a[++n],,}->${n}"
zero->0
One->1
three->3
$

注意:同様の結果が発生します:
for,,*または^^case変換。 ;
などの他の拡張の場合。接頭辞/接尾辞または演算子のいずれかを使用するため。 だけでなく使用するため。${parameter##word}
++--
$((++n))++n

ただし、長さの拡張${#parameter}は期待どおり に機能
します。上記のスニペットでは、〜&のecho "${#a[++n]}->${n}"代わりにecho "${a[++n],,}->${n}yield3->2の代わりにthree->3、a [2]="two"の長さは実際に3文字です。


パラメータの拡張が2回行われていると思います。しかし、なぜこれが起こっているのですか?

4

2 に答える 2

0

私は得た

Zero->0
One->1
Two->2

ただし、「${a[++n]}->${n}」は明確に定義されていない可能性があると思います。

で代用してみてください

let n=$n+1 ; echo "${a[n],,}->${n}";

シーケンスの概念を注入します。

于 2012-04-09T06:45:14.207 に答える