パラメーター展開は、パラメーター${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回行われていると思います。しかし、なぜこれが起こっているのですか?