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

Back to archive index

長南洋一 cyoic****@maple*****
2011年 11月 28日 (月) 09:30:17 JST


長南です。

Takahashi さんのメールより [JM:00514]
>
> ようやく長南さんの言いたかったことがわかりました。

わかっていただいて、うれしく思います。

原文
    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" は、変数間接参照の展開 (すなわち、
パラメータ展開) 以後のことだということになります。たぶん、算術式展開や、
単語の分割や、パス名の展開で使われるということなのでしょう。

-- 
長南洋一




linuxjm-discuss メーリングリストの案内
Back to archive index