長南洋一
cyoic****@maple*****
2011年 12月 26日 (月) 22:35:05 JST
長南です。 ご意見、ありがとうございます。 大谷さんのメールより [JM:00530] > >> 要するに、"Bash uses the value of the variable formed from the rest of >> parameter as the name of the variable" の as の付き方の解釈が、わたしと >> 高橋さんで違うわけです。 > > !を除いた残りが変数(名)であることは、the variable formed from the rest of > parameter で示されているので、 > Bash uses the value (of the variable formed 〜) as the name (of the variable) > という構造だと思います。 ええ、そう読むのが自然でしょう。自然に読んで筋が通るならば、たいてい それが正しいと思います。 > で、セミコロンの直後の this variable は セミコロン直前の the variable のこと。 > ということは、長南さんと同じと言うことかな? Bash uses the value ... as the name と解釈すれば、当然そうなるわけです。 > 私が訳すなら、 > parameter の最初の文字が感嘆符ならば、変数間接展開が行われます。 > bash は残りの parameter からなる変数の値を変数の名前と見なします。 > そしてそこで得られた名前の変数を展開した値を、置換処理の続きで使います。 > これが間接展開です。 > > "そこで得られた名前の"は原文に無い追加です(2つの「変数」の区別のため)。 そのへんは、工夫のしどころですね。 > rather than 節はくどいので省略。 くどくても、省略しない方がよいと思います。立花さんへの返信にも 書きましたが、このパラグラフは、言わば、${parameter} の項の 補足説明であり、rather than 以下は、${parameter} の説明の "The value of parameter is substituted."と対照になっています。 つまり、原文の筆者は、「${parameter} は、普通は parameter の 値に置換されるけれど、parameter が ! で始まっているときは、parameter そのものの値に置換されない」ということを強調しておきたかったのだと 思います。「なぜなら ! は変数の一部ではなく、変数間接参照の 印なんだから」が、裏の意味ですね。 > the rest of the substitutionは、% や # や / 等による修正の事でしょう。 たとえば、${!AAA:-word} とか ${!AAA#word} のようなことをお考えに なったのですね。魅力的な解釈ですし、おそらく原文の筆者もそれを意識して いると思います。 とは言え、${!AAA} といったシンプルな場合もあり、このパラグラフで 考慮の対象にしているのは、むしろそちらの方でしょう。その場合は、 "the rest of the substitution" は、展開・置換という substitution 処理全体のうちの最後の段階、すなわち、${!AAA} を間接展開で得られた値に 置き換えることそのものしか指していないのではないでしょうか。 ですから、この部分で "in the rest of the substitution" の訳に ${!AAA:-word} や ${!AAA#word} の場合を匂わせすぎる言葉を使うのは、 ちょっと言いすぎと言うか、先取りのしすぎではないかと思います。 ここはやはり「置換の残りの過程」ぐらいに大人しく (${!AAA:-word} や ${!AAA#word} のことも考慮に入れていると言えば、言えないこともない ように) 訳しておくところではないでしょうか。 > 高橋さんの解釈だと、the rest of the substitution は、AAA を展開した続き > ですよね。そうだとすると、 > $ AAA=BBB/z/x ; BBB=zzz ; echo ${!AAA} > xzz > になって欲しいですね。ver4は手元に無いのでver3で試すとなりません。 これは、どういうことかわかりませんでした。立花さんが [JM:00531] で おっしゃっているようなことなんですか。 -- 長南洋一