Masakazu Takahashi
emasa****@gmail*****
2011年 11月 28日 (月) 12:20:07 JST
こんにちは。 2011/11/28 長南洋一 <cyoic****@maple*****>: > 原文 > 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. > > 現在の man の訳文 > parameter の最初の文字が感嘆符である場合、間接変数レベル (level of > variable indirection) という概念が導入されます。bash は、展開に > parameter そのものの値を使用するのでなく、 parameter の感嘆符を > 除いた残りの文字を変数名として扱い、その変数の値をその後の展開に > 使用します。 > > 変更なさった訳文 >> parameter の最初の文字が感嘆符ならば、一段の変数間接参照が >> 行われます。 >> この場合、bash はまず、parameter の感嘆符を除いた部分を >> 変数名とし、展開します。 >> そして、値そのものを使うのではなく、続いて変数名の置換に使います。 > > この後に、「これが間接展開 (indirect expansion) と呼ばれるものです。」 > と続くわけですね。 > > ごたごたしてわかりにくい原文をすっきりさせようとなさっているのは、 > よくわかります (いや、ごたごたしているのは、わたしが [JM:00505] に > 書いた試訳の方かもしれません)。 > > このお訳も、高橋さんの中では、つじつまが合っているのだろうと思います。 > でも、残念ながら、他人が読んだ場合、省略のしすぎで、何を言っているのか > わからなくなっています。 > > # 翻訳者が考えすぎてそうなるのは、翻訳ではよく起きることです (というより、 > # 文章一般でよく起きることです)。だからこそ、他人に読んでもらうことが > # 必要なわけです。 > > 「値そのもの」というのは、何でしょうか。何を「変数名の置換」に使う > のでしょうか。「変数名の置換」の変数名とは何のことでしょうか。 > "that value is used in the rest of the substitution" の訳はどこに > 行ってしまったのでしょう。 > > # ほかの方の便宜のために、わたしが挙げた変数間接参照の例を再録して > # おきます。 > # > # $ AAA=BBB; BBB=zzz; echo ${!AAA} > # zzz > > たぶん、「値そのもの」というのは、わたしが挙げた例で言えば、BBB であり、 > それをそのまま使うのではなく、それを変数名として、もう一度展開し、 > 得られた値 (すなわち、わたしの例ならば zzz) を使うとおっしゃりたい > のでしょう。でも、お訳は、「値」とか「変数名」という言葉の指すものが、 > きちんと限定されていないために、非常にわかりにくい文章になっています。 > > また、原文の "as the name of the variable" は「感嘆符を除いた部分」に > かかっていません。"rather than the value of parameter itself" の > かかり方も違います (こちらは厳密には、"that value is used in the > rest of the substitution," の "that value" (つまり、zzz) にかかります)。 > このへんの言葉のかかり方を変えてしまうと、原文とは違ったことを言うことに > なってしまいます。 > > 原文がごたごたしている場合は、原文にとらわれずに、内容的に同等な > すっきりした日本語の文章に書き換えてしまってもよい、という翻訳観は > あると思います (わたしとしては、あまり賛成できませんが、マニュアルの > ような実用的な文章の場合、原文の持つ情報を正しく伝えていれば、それも > アリでしょう)。でも、そうするなら、"as ..." とか "rather than ..." > といった言葉の訳を (と言うか、そういった言葉の名残りを) 原文とは > 違った位置に残さない方がよいと思います。誤訳だと思われかねませんから。 > > 文句ばかり言うのも気がひけるので、もう一度試訳を作ってみます。 > > 高橋さんのお訳を見ると、わたしの試訳 ([JM:00505]) の「parameter 中の > 感嘆符を除いた文字からなる変数の値を変数名として使用します」の > 「変数の値」が、文章がごたごたしてわかりにくくなる原因だと考えて > いらっしゃるようです。「変数」の前に付く修飾語が長すぎるために、 > 「値」が印象に残らない。もっともだと思います。わたしも、そのことは > 気にかかっていたので、そこに気をつけて、訳してみます。 > > parameter の最初の文字が感嘆符ならば、変数間接参照が行われます。 > この場合、bash は parameter そのものの値を使用しません。bash は、 > parameter の感嘆符を除いた部分からなる変数を展開し、得られた値を > 変数名とする変数をさらに展開して、こちらの値をパラメータ展開以後の > 置換に使用するのです。 > > あるいは、文をもう少し細かく切って、 > > parameter の最初の文字が感嘆符ならば、変数間接参照が行われます。 > この場合、bash は parameter そのものの値を使用しません。bash は > まず、parameter の感嘆符を除いた部分からなる変数を展開します。 > そして、得られた値を変数名として、それをさらに展開し、その値を > パラメーター展開以後の置換に使用するのです。 > > 前のメールで a level of は、a piece of や a cup of と同じようなもの > ではないかと書きました。あれからさらに考えているうちに、これは > 「一段の」とか「間接レベル 1 の」というよりも、単に「一個の、一回の」 > ということではないかと思えてきました。もしそうならば、a level of は、 > 日本語では省略可能だと思います。 > > 最後に、"that value is used in the rest of the substitution" に > ついても念のため説明しておきます。この "that value" は、わたしの > 例で言えば zzz だということは、前のメールに書きました。とすると、 > 変数間接参照の展開は、終わっているわけです。それで、「その値が > the rest of the substitution で使われる」というのですから、この > "the rest of the substitution" は、変数間接参照の展開 (すなわち、 > パラメータ展開) 以後のことだということになります。たぶん、算術式展開や、 > 単語の分割や、パス名の展開で使われるということなのでしょう。 今回の長南さんの問題提起は、“「値そのもの」という言葉がよくわからな い”ということですね。そして、訳文の構成は前回の訳ベースですね。 前回の長南さんの訳に私が持った疑問とその考察の内容を「細かいところ」 と省略してしまったため、混乱を与えてしまったようで、失礼しました。 私の疑問とその考察を改めて説明すると、以下のとおりです。 ●parameter は、長南さんの例でいうと“AAA”ではなく“!AAA”を指すもの →「parameter そのものの値を使用しません」では辻褄があわない →“rather than〜”を“Bash uses〜”以降全体にかかると考えると辻褄があ わない。原文どおり“this variable is then〜”以降にかかると考えたほう がいい ●“substitution”(“substitute”)と“expand”と“use”の 3 つの言葉は どう使い分けられているのか →この直前で、${parameter} を「parameter の値に置換されます」と説明して います。考えている部分はこの説明の直後なので、“substitute”は同じこと を指すと考えるのが(動作と照らし合わせても)自然だと考えます。 →長南さんの例でいうと、BBB から zzz に展開することを指すと考えます →“expand”は、とりあえず一般的な「展開」と考えておきます。この場合は、 結果的に変数の値を求めることになります →“use”は以下の 2 つで使われています ・“Bash uses the value of the variable〜” ・“value is used in the rest of the substitution” “use”は、“!”を除いたり変数を展開したりの操作を加えた結果の値の用途 を、「〜に使う」と示しています。 このことから、上の“rather than〜”の考察にもとづくと、「値そのものを 使う」「続いて変数名の置換に使う」の 2 つが対比されると考えます。 以上の考察から、前の私の訳を提示しました。 で、今回、“「値そのもの」という言葉がよくわからない”という長南さんの 指摘により、「値そのものを使う」を「値を展開結果として使う」と変更します。 https://github.com/emasaka/bash-jman/commit/5d46956e458bfcf1a0fe86daaee29da7de70e424 -- Masakazu Takahashi (emasaka)