R4000 2.2
tati****@kc5*****
2011年 12月 13日 (火) 20:52:06 JST
こんばんは、立花@鎌ヶ谷市です。 In <20111****@maple*****>, at Date: Sat, 10 Dec 2011 20:35:01 +0900 (JST), on Subject: [JM:00526] bash.1 の翻訳で意見が分かれています , 長南洋一 <cyoic****@maple*****> writes: | 「パラメータ展開」の「関数間接参照 (variable indirection)」のくだりの | 翻訳について、高橋さんとわたしの見解が分かれています。そこで、皆さんの | ご意見をうかがいたいと思います。 | | どれがよいでしょうか。 訳文を読んで思ったことを。 | 原文: | ${parameter} | The value of parameter is substituted. The braces are required | when parameter is a positional parameter with more than one | digit, or when parameter is followed by a character which is not | to be interpreted as part of its name. | | If the first character of parameter is an exclamation point (!), | a level of variable indirection is introduced. Bash uses the | value of the variable formed from the rest of parameter as the name | of the variable; this variable is then expanded and that value is | used in the rest of the substitution, rather than the value of | parameter itself. This is known as indirect expansion. | | 問題は "If the first character of parameter ..." 以下の翻訳です。 | 文中の parameter (原文でも訳文でも、${parameter} を始め、すべて下線が | 付いています) が何を表しているかを明かにするため、原文の直前の部分も | 引用しました。 | | 元訳の訳文 (参考のため): | parameter の最初の文字が感嘆符である場合、間接変数レベル (level of | variable indirection) という概念が導入されます。bash は、展開に | parameter そのものの値を使用するのでなく、parameter の感嘆符を除いた | 残りの文字を変数名として扱い、その変数の値をその後の展開に使用します。 | これが間接展開 (indirect expansion) と呼ばれるものです。 | | 高橋さんの訳文: | parameter の最初の文字が感嘆符ならば、一段の変数間接参照が | 行われます。この場合、bash はまず、parameter の感嘆符を除いた部分を | 変数名とし、展開します。そして、parameter ではなく、この値を使って | 置換を行います。これが間接展開 (indirect expansion) と呼ばれるものです。 | | わたしの訳文 (1): | もし parameter の最初の文字が感嘆符 (!) ならば、変数間接参照が | 行われます。bash は parameter の感嘆符を除いた部分からなる変数の | 値を変数名として使用し、さらにその変数を展開して、得られた値を | 置換の残りの過程で使用するのです。parameter そのものの値は、 | 置換に使用しません。これは、いわゆる間接展開というものです。 | | わたしの訳文 (2): | parameter の最初の文字が感嘆符 (!) ならば、変数間接参照が行われます。 | この場合、bash は parameter そのものの値を置換に使用しません。 | bash はまず、parameter の感嘆符を除いた部分からなる変数を展開します。 | そして、得られた値を変数名として、それをさらに展開し、その値を | 置換の残りの過程で使用するのです。... | | 要するに、"Bash uses the value of the variable formed from the rest of | parameter as the name of the variable" の as の付き方の解釈が、わたしと | 高橋さんで違うわけです。 全体としては、長南さんのようにくどいくらいに説明した方が良いかな、と 思いました。 | # わたしの訳文について、ちょっと説明。 | # | # "a level of variable indirection" の "a level of" については、 | # わたしも最初は、「一段の、間接レベル 1 の」ということだと考えて | # いました。しかしそのうち、これは、"a piece of" や "a cup of" と | # 同じようなものではないか、すなわち、「一個の (一回の) 間接参照」 | # ということではないかと思えてきたのです (不加算名詞の加算化)。 | # そう解釈した場合、「一回の」を省略した方が日本語として自然なので、 | # 省略しました。 !!AAA というのはありえないようなので、「一段の」というのは省略した方が 読みやすいですね。 #いちおう、bash-4.1 のソースを参照しました 「bash は parameter そのものの値を置換に使用しません。」 というのは、 「parameter の感嘆符を除いた部分からなる変数」 の値のことを指すように思います。 #原文もそれを言いたかった気がする 長南さんの訳文 (2) を基に書いてみると、 \fIparameter\fP の最初の文字が感嘆符 (!) ならば、変数間接参照が 行われます。 この場合、\fBbash\fP は \fIparameter\fP そのものの値 (訳注:\fIparameter\fP の感嘆符を除いた部分からなる変数の値と思われる) を置換に使用しません。 \fBbash\fP はまず、\fIparameter\fP の感嘆符を除いた部分からなる変数を 展開します。 そして、得られた値を変数名として、それをさらに展開し、その値を 置換の残りの過程で使用するのです。 これが\fI間接展開 (indirect expansion)\fP と呼ばれるものです。 でしょうか。 「\fIparameter\fP の感嘆符を除いた部分からなる変数」 は、高橋さんの表現のような 「\fIparameter\fP の感嘆符を除いた部分を変数名とみなした変数」 が良いかな。 #すごく長ったらしいですが、、、 長南さんが書かれた 変数間接参照の例 $ AAA=BBB; BBB=zzz; echo ${!AAA} zzz を訳注としていっそ書いた方がわかりやすいかも。 -- tati****@kc5***** 立花 晃@鎌ヶ谷市