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

アーカイブの一覧に戻る

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*****				立花 晃@鎌ヶ谷市




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