bash -c 'a=b; b[3]=c; a[3]=d; d=e; echo ${!a[3]}'
これは(少なくとも手元のbash 3.1.17では)「e」と出力します。そうではなく
「c」と出力したい(つまり配列要素を配列名で間接参照したい)のですが、どう
すればいいのでしょうか。とりあえず、evalを使う方法しか思い付きません。
自己フォローです。間接参照に使う変数の値(上の例ではa)に「[3]」まで含め
てしまえばいいようですね。つまり
bash -c 'a=b[3]; b[3]=c; echo ${!a}'
のような具合です。何だかなあとは思いますけど。
bash -c 'a=b; b[3]=c; echo ${!{a}[3]}'
を許してくれればいいのにと思うんですが、現実にはエラーになっちゃいますね。
shとか、LLの類は、変な記号や、間接参照の記法が直感的に分かりにくいことが多いような気がしますが…
と、ぎりぎり lang.misc 的に引き戻してみるです。
たけおか@AXE (生きてました)
スパムと同値ですみませんです。
# そうか、fj.unix.shellsというものがあったんだ。すみません。fjのニュース
# グループ構成をすっかり思い出せなくなってしまってます。まあbashも言語、
# てえことでお許し下さい。
> shとか、LLの類は、変な記号や、間接参照の記法が直感的に分かりにくいことが多いような気がしますが…
> と、ぎりぎり lang.misc 的に引き戻してみるです。
bashだと後付けで構文の作られた配列とか間接参照とかが特にわかりにくいで
すね。perlも、やはり後付けのリファレンスあたりはちょっと苦手です。