Masakazu Takahashi
emasa****@gmail*****
2011年 11月 30日 (水) 12:09:22 JST
こんにちは。 2011/11/29 長南洋一 <cyoic****@maple*****>: >> ●“substitution”(“substitute”)と“expand”と“use”の 3 つの言葉は >> どう使い分けられているのか >> >> →この直前で、${parameter} を「parameter の値に置換されます」と説明して >> います。考えている部分はこの説明の直後なので、“substitute”は同じこと >> を指すと考えるのが(動作と照らし合わせても)自然だと考えます。 >> →長南さんの例でいうと、BBB から zzz に展開することを指すと考えます >> >> →“expand”は、とりあえず一般的な「展開」と考えておきます。この場合は、 >> 結果的に変数の値を求めることになります > > おっしゃりたいことが、やっとわかったような気がします。 > 変数間接参照では、当然ながら、展開を行い、最終的に得られた値で > parameter を置換することになる。"in the rest of the substitution" の > "the substitution" は、その展開から置換までの全体を指している、という > ことですね。たしかに、そう解釈するのが正しいかもしれません。少なくとも、 > ひとつの立派な解釈だと思います。 > > その考えで行くと、"the rest" というのは、substitution における > 最後の置換動作を指すことになります。問題部分は、こんなふうに > 解釈できます。 > > ... (続いて、さらに) この変数 (BBB) が展開され、最終的な置換では > その値 (zzz) が使用されることになります。parameter そのものの値は > (最終的な置換では) 使用されません。 > > # 「最終的な置換」は、とりあえず使ってみたものです。 > >> ●parameter は、長南さんの例でいうと“AAA”ではなく“!AAA”を指すもの > > これは、同意してくださるわけですね。 > >> →「parameter そのものの値を使用しません」では辻褄があわない >> >> →“rather than〜”を“Bash uses〜”以降全体にかかると考えると辻褄があ >> わない。原文どおり“this variable is then〜”以降にかかると考えたほう >> がいい > > 厳密に言うと、"rather than the value of parameter" は "that value > is used in the rest of the substitution" の "that value" にかかる > ということですね。ここを直訳すると (上と重なりますが)、こんなふうに > なります。 > > 次にこの変数が展開され、parameter そのものの値ではなく、その値が > 最終的な置換で使用されます。 > > 問題は、「この変数が展開され」と「その値が」の間が開きすぎること > なんです。そのため、「その値」の「その」が何を指しているかわかり > にくくなっている。それで、わたしは、最初の試訳では "rather than ..." > の訳を別の文にして、後ろに置きました。しかし、考えているうちに、 > 「bash はまず、parameter の感嘆符を除いた部分からなる変数を展開し」の > 前に持ってきても、パラグラフ全体の意味はほとんど変わらず、むしろ > 読みやすくなりそうだ、と気がついて、"rather than ..." の訳を前に > 出すことにしたのです。そして、くどくなるのを避けるために、「最終的な > 置換 (試訳では、以後の置換)」を省略しました。元訳をなさった方も、 > この部分を前に持ってきていますから、同じようにお考えになったのだと > 思います。 > > 「最終的な置換」を省略しない方がよいということでしたら、元訳にならって、 > 「この場合、bash は parameter そのものの値を置換に使用しません」などと > すればよいと思います。原文の構成を変えたくないのなら、わたしの最初の > 訳例のように、後ろに付ければよいでしょうし。 > >> で、今回、“「値そのもの」という言葉がよくわからない”という長南さんの >> 指摘により、「値そのものを使う」を「値を展開結果として使う」と変更します。 > > こんなふうになるのですか。 > > parameter の最初の文字が感嘆符ならば、一段の変数間接参照が > 行われます。 > この場合、bash はまず、parameter の感嘆符を除いた部分を > 変数名とし、展開します。 > そして、値を展開結果して使うのではなく、続いて変数名の置換に使います。 > > 失礼ながら、前とそう変わっていないのではないかと思います。 > 原文では "and that value is used" と zzz がきちんと出ています。 > それに、"in the rest of the substitution" に使うのは、BBB ではなく > zzz です。"rather than the value of parameter itself" も抜けています。 > > # 込み入った原文に出会ったときに、わたしもよくやることですが、一度 > # 原文にできるだけ忠実な直訳を作ってみるとよいと思います。 > # そして、自分の訳と比べてみると、何を訳し落としているかわかることが > # あります。あくまで比較に使うのであって、直訳の方を採用しろと > # いうことではありません。 > > ------------------------------------------------------- > もう必要ないのではないかと思いますが、原文と、AAA、BBB、zzz の説明を > 念のため付けておきます。 > > 原文 > 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 長南さんは最初から“that value”が zzz を指すという論を元に、私の訳に疑 問を呈しているわけですね。また、“parameter そのものの値”という言葉を 肯定しているわけですよね。 一方、私は [JM:00517] で“最後の「substitution」が「BBB から zzz に展開 すること」を指す”ということや、“「parameter そのものの値」という言葉 は辻褄があわない”ことを示しました。伝わらなかったようで、失礼しました。 私が [JM:00514] と [JM:00517] で説明した内容を、改めて順を追って、より 細かく繰り返します。 http://sourceforge.jp/projects/linuxjm/lists/archive/discuss/2011-November/000516.html http://sourceforge.jp/projects/linuxjm/lists/archive/discuss/2011-November/000513.html ・“parameter” は、“AAA”ではなく“!AAA”を指します ←直前で“If the first character of parameter is an exclamation point” と書かれていることによります →“!AAA”は変数ではないので値を持ちません。そのため、「parameter その ものの値」という言葉は辻褄があいません ・それに続く部分は“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 の用途を説明している段階です ・その後に“this variable is then〜”と続きます →つまり、この“this variable”は上の変数と同じものを指すのが自然です。 すなわち“AAA”を指すと考えます ・この“this variable”すなわち AAA は、“expanded”すなわち展開されます →その結果は“BBB”です ・その直後に“that value is used〜”と続きます →つまり、“that value”は上と同じものを指すのが自然です。すなわち “BBB”を指すと考えます ・この“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”が展開を意味していないことがわかります -- Masakazu Takahashi (emasaka)