[JM:00528] Re: bash.1 の翻訳で意見が分かれています

アーカイブの一覧に戻る

長南洋一 cyoic****@maple*****
2011年 12月 14日 (水) 21:04:10 JST


長南です。

立花さんのメールより [JM:00527]
> 
> | 「パラメータ展開」の「関数間接参照 (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.

> !!AAA というのはありえないようなので、「一段の」というのは省略した方が
> 読みやすいですね。
> #いちおう、bash-4.1 のソースを参照しました

a level of の訳がなくてすむのなら、ない方が「一段て何だろう」と
読者を戸惑わせないですみますね。

> 「bash は parameter そのものの値を置換に使用しません。」
> というのは、
> 「parameter の感嘆符を除いた部分からなる変数」
> の値のことを指すように思います。
> #原文もそれを言いたかった気がする

これは微妙な違和感の話ですね。つまり、言葉の解釈からすると、
この部分は「bash は (感嘆符に始まっている) parameter そのものの値を
置換に使用しません」という意味としか考えられない。でも、感嘆符に始まる
変数なんて存在しないのだから、何か変な気持ちがする (同じようなことを
高橋さんもおっしゃっていました)。${!AAA} を例に取ると、「AAA の値を
置換に使用しない」なら、間接参照なんだから当然で、よくわかる。
この parameter は感嘆符を除いた部分のことを言っているのではないか。

おっしゃることはわかるのですが、それはお考えすぎではないかと思います。

まず、このパラグラフの parameter には、皆下線が引いてあります (本当は
イタリックなんでしょうけれど)。ですから、manpage の習慣からして、
三つあるどの parameter も、直前のパラグラフの ${\fIparameter\fP} に
対応する、同じものを表すと考えるべきでしょう。

それから、これも高橋さんが指摘なさったことですが、

  ... and that value is used in the rest of the substitution,
  rather than the value of parameter itself. 

という文の "rather than the value of parameter itself (is used ..)" は、
意味的に直前のパラグラフの

  ${parameter}
        The value of parameter is substituted.

と対照関係になっています。すなわち、parameter の先頭文字が感嘆符以外
である普通の場合は、${parameter} は変数 parameter の値に置換される。
しかし、parameter の先頭文字が感嘆符の場合は、${parameter} は parameter
の値に置換されるわけではない (その場合は、感嘆符は変数名の一部ではなく、
変数間接参照の印であって、変数間接参照というものが行われる)。

このような対照関係を考えれば、「bash は parameter そのものの値を
置換に使用しません」の parameter が、感嘆符に始まる文字列でも、
それほど違和感がなくなるのではないでしょうか。

> 長南さんの訳文 (2) を基に書いてみると、
> 
> \fIparameter\fP の最初の文字が感嘆符 (!) ならば、変数間接参照が
> 行われます。
> この場合、\fBbash\fP は \fIparameter\fP そのものの値
> (訳注:\fIparameter\fP の感嘆符を除いた部分からなる変数の値と思われる)
> を置換に使用しません。
> \fBbash\fP はまず、\fIparameter\fP の感嘆符を除いた部分からなる変数を
> 展開します。
> そして、得られた値を変数名として、それをさらに展開し、その値を
> 置換の残りの過程で使用するのです。
> これが\fI間接展開 (indirect expansion)\fP と呼ばれるものです。
> 
> でしょうか。

" This is known as indirect expansion." の訳は、「これは、いわゆる
間接展開というものです」より「これが間接展開 (indirect expansion) と
呼ばれるものです」の方がよいですか。

わたしとしては、その場合でも、「これが」ではなく、「これは」では
ないかと思います。ここでは「が」と「は」のどちらでも使えますけれど、
「が」は未知、あるいは未知扱いするもの (換言すれば、新情報、あるいは
新情報扱いするもの) に続き、「は」は既知、あるいは既知扱いするものを
受けることからして、「が」では「これ」を強調しすぎると思うのです。

> 長南さんが書かれた
> 
> 変数間接参照の例
> $ AAA=BBB; BBB=zzz; echo ${!AAA}
> zzz
> 
> を訳注としていっそ書いた方がわかりやすいかも。

そうですよね。一般に manpage は理屈で説明しようとするでしょう。
実例を出してくれれば、すっきりわかるのに、と思うことがよくあります。
抽象が苦手で、実例や図解が好きなのは、日本人の特性かもしれませんけれど。

訳注にするとしたら、別のパラグラフとして、独立させた方がよさそうですね。

-- 
長南洋一




linuxjm-discuss メーリングリストの案内
アーカイブの一覧に戻る