[JM:00520] Re: [POST:DO] bash bash.1 (EXPANSION 2)

アーカイブの一覧に戻る

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)




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