長南洋一
cyoic****@maple*****
2011年 12月 1日 (木) 21:21:16 JST
長南です。 原文と変数間接参照の例は残しておきます。 >> 原文 >> 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. >> >> 変数間接参照の例 >> $ AAA=BBB; BBB=zzz; echo ${!AAA} >> zzz Takahashi さんのメールより [JM:00520] > > 私が [JM:00514] と [JM:00517] で説明した内容を、改めて順を追って、より > 細かく繰り返します。 詳しく説明してくださったおかげで、高橋さんとわたしの考えが どこで食い違っているか、よくわかりました。 > ・“parameter” は、“AAA”ではなく“!AAA”を指します > ←直前で“If the first character of parameter is an exclamation point” > と書かれていることによります > →“!AAA”は変数ではないので値を持ちません。そのため、「parameter その > ものの値」という言葉は辻褄があいません それで「辻褄が合わない」とおっしゃっていたのですか。わかりました。 わたしは、事実レベルのことではなく、文章の解釈か、訳文のレベルの ことだと思っていました。「辻褄が合わない」とはどういうことですかと、 素直にうかがえばよかったと思います。 この件については、わたしも気がついていました。最初は、「かりに !AAA という変数があっても、そちらが使われるのではなく ...」ということだと 考えていました。でも、どうやら !AAAという変数は作成できないようです。 とすると、「parameter そのものの値は (置換に) 使用しません」という 文章は、当たり前すぎて、言うだけの意味がないことになります。 しかし、原文は "the value of parameter itself (パラメータそのものの値)" と言っているわけです。 確かに、実際の動作のレベルでは言う意味がありません。"the value of parameter itself" はナンセンスだと言ってもよいでしょう。でも、言葉の レベルでは、意味があるのではないでしょうか。「parameter の先頭文字が ! の場合は、parameter の値が使われるわけではありません」というのは、 それは実際その通りなんですから。変数 !AAA なんて、実際にはありえない としても。 要するに、「parameter の先頭文字が ! の場合、! は変数名の最初の文字 ではなく、変数間接参照の印である」ということを、別の形で言っているのだ と思います。 わたしとしては、"that value is used ..., rather than the value of parameter itself" のような文章は、あまり深く考えずに、文章の表面だけを 追って訳しておけばよいのではないかと思います。語尾を工夫する必要は あるかもしれませんけれど。 > ・それに続く部分は“Bash uses the value of the variable formed from > the rest of parameter as the name of the variable”とあります > →上記で parameter が“!AAA”を指すと考えたことにより、必然的に > “variable formed from the rest of parameter”とある変数は、“AAA”を > 指します ここまでは、わたしの解釈も同じです。 > ・ここではまだ“Bash uses the value〜”すなわち“use”の段階です > →つまり、変数の value の用途を説明している段階です ここで解釈が別れるんですね。上で引用なさっている文から "the value of the variable" を修飾している部分を取ってしまうと、こうなります。 Bash uses the value of the variable ... as as the name of the variable 「変数 (AAA) の値 (BBB) を変数名として使う」ですから、使用する 変数名は BBB になるわけです。 > ・その後に“this variable is then〜”と続きます > →つまり、この“this variable”は上の変数と同じものを指すのが自然です。 > すなわち“AAA”を指すと考えます わたしの解釈では、"this variable" は、前の文で変数名が決まった、その変数 (BBB) ということになります。 this と言っていることが、補強材料になります。this というのは、 近いものを指すわけでしょう。それで、"Bash uses the value of the variable" の "the variable" ではなく、直前にある "the name of the variable" の "the variable" を指すことになります。 というわけで、以下ひとつづつ解釈がずれていくわけです。 > ・この“this variable”すなわち AAA は、“expanded”すなわち展開されます > →その結果は“BBB”です > > ・その直後に“that value is used〜”と続きます > →つまり、“that value”は上と同じものを指すのが自然です。すなわち > “BBB”を指すと考えます "that value" が "this variable" の値だ、という点では同意見で、 ただ、それが BBB か zzz かという解釈が違うわけですね。 > ・この“BBB”は、その直後で“used in the rest of the substitution, > rather than the value of parameter itself.”とあります > →つまり、BBB について“used in the rest of the substitution”と > “(used) the value of parameter itself”と 2 つの選択肢(use=用途)が > あるうち、前者を適用する、ということを説明しています。前者は、“BBB を > zzz にsubstitute すること”を、後者は“BBB のまま展開結果とすること” > を指しています use は二重目的語を取りませんから、そう解釈するには、“(used) for the value of parameter itself”と、原文に for (あるいは、as) が必要だと 思います。それに、その解釈では、"the value of parameter itself" が 存在することになりませんか。 -- 長南洋一