長南洋一
cyoic****@maple*****
2011年 12月 10日 (土) 20:35:01 JST
長南です。 「パラメータ展開」の「関数間接参照 (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" と # 同じようなものではないか、すなわち、「一個の (一回の) 間接参照」 # ということではないかと思えてきたのです (不加算名詞の加算化)。 # そう解釈した場合、「一回の」を省略した方が日本語として自然なので、 # 省略しました。 # # (1) と (2) の大きな違いは、"rather than the value of parameter # itself" を後ろに付けるか、前に出すかです。わたしとしては、前に # 出しても意味的に変わりはないし、その方がわかりやすいのではないか # と思います。 # # "rather than ..." を内側に組み込んで、「... さらにその変数を展開して、 # parameter そのものの値ではなく、展開から得られた値の方を置換の残りの # 過程で使用するのです」と訳す手もあります。でも、"that value" の # that を (このように) かなり説明的にくどく訳さないと、意味が通じなく # なりそうなので、前に出すか、後ろに付けるかした方がよいと思います。 ついでに、高橋さんへ。 このパラグラフの一番最後の文の "in order to introduce indirection" が「間接展開を表すには」になっています。それでも意味は通りますが、 indirection は「間接参照」の方でしょう。 -- 長南洋一