[JM:00450] Re: [POST:DO] bash bash.1

Back to archive index

長南洋一 cyoic****@maple*****
2011年 10月 14日 (金) 23:07:14 JST


長南です。

有難うございます。どう返事をしようかと、考えあぐんでいるところ
でしたから、とても助かりました。

元木さんのメールより [JM:00448]
> 
> 
>>>> .B COMP_TYPE

>>>> .\"O \fI@\fP, to list completions if the word is not unmodified,

>>>> \fI@\fP は、途中での一致がないときの候補のリスト表示です。

>>> しかし、そうだとすると、これは原文が間違っているのでしょうか (not と
>>> un のどちらかが不要)。それとも、「目下補完中の単語をユーザが
>>> 何か文字を打ち込むことによって変更しないでもない (変更する必要がある)
>>> ときは」ということなんでしょうか。それでは、show-all-if-unmodified と
>>> 矛盾するだろうし ... いづれにしても、これは原文が意味不明瞭ですから
>>> (わたしの読解力が足りないのかもしれませんが)、原文を離れ、実際の動作に
>>> 即してお訳しになったのも、当然だと思います。
>> 
>> 手元の英和辞典いくつかによると、「modify」は「修飾する、意味を限定する」
>> という意味があるとのこと、「unmidified」は「限定されていない」という意
>> 味があるとのことでした。
>> 
>> そのため、“unmodified”=“限定されてない”=“途中までの一致がある”と
>> 考えました。

たとえば、「修飾語 (modifier) によって名詞の意味を限定 (modify) する」
といった「変更、調節」の意味のバリエーションですね。ただ困ったことに、
"unmodified" = "限定されていない" = "途中までの一致がない" と、逆にも
考えられます。その線で行けば、not ummodified は、要するに modified で、
つまり "限定されている" = "途中までの一致がある"になる。それで、
原文が間違っているのではないかと考えたわけです。

> 別メールでコメントしていますが、もう少し考えてみました。
> 
> show-all-if-unmodified の説明を合わせて考えると、
> "unmodified" = "without any possible partial completion"
> ではないでしょうか。
> 
> 「途中までの一致がある」だと、「複数の選択候補があり、これ以上補完できない」
> という原文のニュアンスが失われているように感じました。

[JM:00446] から引用。
>
> show-all-if-unmodified の説明を参考にして、少し意訳を考えてみました。
> 「(部分的な補完が行われず) 補完対象の単語が変更されていない状況での
> リスト表示」

これ、ほんとに難しいですね。if the word is not unmodified が
if the word is not modified の間違いだとして、show-all-if-unmodified
の説明を見ると、

  If set to On, words which have more than one possible completion
  without any possible partial completion (the possible completions
  don't share a common prefix) cause  the  matches  to  be  listed
  immediately instead of ringing the bell.

となっていますから、いっそのこと modify から離れて、「部分的な
補完ができない場合に、補完候補のリストを表示します」と言って
しまったらどうでしょう。「途中までの一致がないときの候補のリスト表示」
と同じ考え方ですし、ちょっと曖昧ですけれど。
考えてみれば、「部分的に補完する」のは、まさに modify することですから、
modify の訳ですと言えないこともありませんし。

>>>> .B COMP_WORDBREAKS
>>>> .\"O The set of characters that the \fBreadline\fP library treats as word
>>>> .\"O separators when performing word completion.
>>>> .\"O If
>>>> .\"O .SM
>>>> .\"O .B COMP_WORDBREAKS
>>>> .\"O is unset, it loses its special properties, even if it is
>>>> .\"O subsequently reset.
>>>> 単語補完のときに \fBreadline\fP ライブラリが単語分割の区切り文字として
>>>> 扱う文字の並びです。
>>>> .SM
>>>> .B COMP_WORDBREAKS
>>>> を unset すると、この変数の特殊な性質はなくなります。後で再び
>>>> set しても元には戻りません。

>>> 説明をうかがえば、正しい訳だとわかりますが、「この変数の特殊な性格は
>>> なくなります」という言い方は漠然としすぎていると思います。
>>> こういうとき日本語では「bash に対する (とって) 特別な意味は (効果は、
>>> 働きは、関係は) なくなります (失われます)」などと言うのではないで
>>> しょうか。つまり、「特殊な」か「特別な」か「特有の」か、「性質」か
>>> 「性格」か、あるいは properties をもっと具体的に表現した方がよいのか。
>>> もうすこし訳語を練る余地があると思います。
>> 
>> 通常の(special ではない)変数と対比して「特殊」という意味だと思い、い
>> ろいろ考えると「special」を「特殊」と訳すのが自然かと思いました。
>> 「固有」という訳も考えましたが、「固有」だと「通常の(special ではな
>> い)変数」との対比ではなく、それぞれの変数が違うニュンアンスになってし
>> まうように感じました。
> 
> 長南さんが気にされているのは、special の訳と、properties の訳の両方ですね。
> 
> properties の方ですが、
> 日本語で「性質」というと、化学物質等の振る舞いを連想させることが多く、
> 変数の「性質」というのはあまり言わない表現だと思います。
> どちらかというと、変数が持つ「役割」とか「意味」の方がしっくり来る気がします。
> 
> special の方は、「特別な」か「特殊な」あたりかなと思います。
> 
> 全体としては「変数が持つ特別な役割がなくなります」を推しておきます。
> 特別→特殊、役割→意味 に置き換えても誤解は生まないと思います。

ええ、property の訳は、とても難しいと思います。「性質」や「性格」で
すむときはよいのですが、property の概念と「性質、性格」の概念は
かなり違っていて、property の概念には「性質」や「性格」の概念に
存在しないものが含まれている。たとえば、あるものが他のものに
対して持っている役割とか、意味とか、関係とか。ファイルならそれが
作成された時間とか、所有者とか。「属性」の方が意味が近いでしょうが、
これもぴったり一致するわけではありませんし。

そんなわけで、わたしなど、困ったときは「プロパティ」とカタカナにして
すませてしまいますが、この場合のように、その手が使えないときもある
わけです。そういうときは、ほんとうに難しい。その場合における property
の具体的な意味を考えて、訳語を工夫するよりないだろうと思います。

この場合なら、SECONDS を例に取れば、bash が稼働秒数を代入し続ける
という特性を SECONDS という変数は持っている。COMP_WORDBREAKS ならば、
単語補完のときに readline ライブラリが、区切り文字として使用する
文字群を保持するという特性を持っている。そして、unset すると、bash に
対するそうした特別な関係がなくなってしまう。ほかの変数のことも考えに
入れると、やっぱり、「役割」か「意味」というところでしょうか。
「関係」もありそうです。

ただ、わたしとしては、「この変数が bash に対して持つ特別な役割」
と「bash に対して持つ」を補足した方がよいと思います。

>>> .B FUNCNAME
> 
>>> .\"O This variable can be used with \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP.
>>> .\"O Each element of \fBFUNCNAME\fP has corresponding elements in
>>> .\"O \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP to describe the call stack.
> 
>>> この変数は \fBBASH_LINENO\fP や \fBBASH_SOURCE\fP と組になっています。
>>> \fBFUNCNAME\fP の各要素は \fBBASH_LINENO\fP や \fBBASH_SOURCE\fP
>>> の各要素に対応し、呼び出しスタックを表します。

>> 手元の英和辞典いくつかに「表現する」という訳語があったため、
>> 「表現します」と変更しました。

> 各要素は呼び出しスタックの各要素に対応しているのであり、
> 呼び出しスタック(全体)を表現しているわけではないですね。

ええ、そういう意味で、「FUNCNAME の各要素は ... 呼び出しスタックを
表します」はアウトですが、「FUNCNAME の各要素は ... 呼び出しスタックを
表現しています」は、ぎりぎりセーフだと思います。当たらずと言えど、
遠からずで。

でも、いづれにしろ、辞書にある訳語がどれもこの場合ぴったりして
いないわけですから、こういう場合には、自分で訳語を工夫する必要が
あると、わたしとしては言いたかったわけです。そして、わたしの試訳は、
その一例だと。

# たぶん、自分で訳語を工夫するには、しっかりした英英辞典に当たって、
# 問題の言葉の中心的な意味を押さえ、さらに、英語の文例や和訳例も
# 調べてみる必要があるでしょう。

# 訳例を調べるには、「英辞郎」がとても役に立ちます。
# http://www.alc.co.jp/

> なかなか難しいですが、describe のニュアンスを出しながら、意訳してみました。
>
> FUNCNAME の各要素には BASH_LINENO と BASH_SOURCE に対応する要素があり、
> これらを参照することで、呼び出しスタックの状態を確認できます。

これも一つの工夫ですね。
 
>>>> .B LINENO
>>>> .\"O Each time this parameter is referenced, the shell substitutes
>>>> .\"O a decimal number representing the current sequential line number
>>>> .\"O (starting with 1) within a script or function.  When not in a
>>>
>>>> この変数が参照されると、
>>>> シェルはスクリプトや関数における現在の行番号 (1から始まります) を表す
>>>> 10 進値を代入します。スクリプトや関数の内部でない場合には、

>>>  この変数が参照されるたびに、シェルはスクリプトや関数における現在の
>>>  行番号 (1 から始まります) を表す10 進数を代入し直します。
>>>
>>> 一例として前の訳をいじってみましたが、この方が具体的でしょう。
>> 
>> 前のメールに書いたように、「代入」はおかしいと思います。
>> each や substitute を生かすということで、以下のように変更します。
>> 
>>     この変数が参照されると、その場所ごとに、
>>     スクリプトや関数における現在の行番号 (1 から始まります) を表す
>>     10 進値に置き変わります。
> 
> 「Each」のニュアンスが「current」に含まれるとのコメントがありましたが、
> 著者が「Each time ...」といっているのは、普通のシェル変数は値を保持していて、
> 何度参照されても保持している値を返すだけなのに対して、
> LINENO の場合には、変数が参照された際に、(保持している値を返すのではなく)
> 「その都度」変数の内容を更新して返す、ということを言いたかったのでは
> ないでしょうか。
> 
> substitute についてですが、
> 変数の内容を変更する行為は「代入」(substitution) というと思います。
> LINENO という変数を参照する側から見ると、LINENO の内容が更新されているので、
> 「代入」という表現は正しいのではないでしょうか。

「『代入』(substitution)」というのは、どこの英和辞書に出ていましたか。
うちの「小学館ランダムハウス」の substitution には、「代理、代用、
取替え、交換、置換」しか出ていませんでした。それで、ちょっと気になって、
研究社「新和英大辞典 (第四版)」を引いてみたら、「代入」は
「[数] substitution」と訳してあります。びっくりしました。Web の
「英辞郎」でも、やっぱり substitute に「代入」がありました。
「代入」assign だけではないのですね。思い込みで「代入では言葉が
足りない」などと言って、高橋さんには悪いことをしました。

> 案を考えてみました。いかがでしょうか?
> 
>   この変数が参照されるたびに、シェルはスクリプトや関数における現在の行番号
>   (1 から始まります) を表す 10 進数をこの変数に代入します。

「たびに」があれば、「代入し直す」という必要はなかったのですね。
でも、高橋さんの訳をちょっと変更した

  この変数は、参照されるたびに、スクリプトや関数における現在の行番号
  (1 から始まります) を表す 10 進数に置き換わります。

もあると思います。「シェルは ... この変数に」と主語と対象を出した方が
明晰でしょうけれど。

>>> .B SHLVL
>>> .\"O Incremented by one each time an instance of
>>> .\"O .B bash
>>> .\"O is started.
>>> .B bash
>>> の実体が起動されるたびに 1 ずつ増えます。

>> 少し意訳が入りますが、“何に対して増えるのか”が誤解のもとのようなので、
>> 以下のように変更しました。
>> 
>>     bash が起動するときに、環境変数で渡された値から 1 増やした値が
>>     設定されます。
> 
> 別メールでもコメント致しましたが、
> 個人的には、この表現は誤解も少なく、いい意訳かなと思います。

たしかに正確ですね。でも、元木さんが [JM:00446] でお示しになった
「サブプロセスとして bash が起動されると、SHLVL が増える」という
考え方も、簡潔で捨てがたいと思います。その行き方なら、「サブプロセス
として bash が起動されるたびに、1 すつ増えます」でしょうか。

-- 
長南洋一




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