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

Back to archive index

Akihiro MOTOKI amoto****@gmail*****
2011年 10月 14日 (金) 01:03:27 JST


元木です。こんばんわ。

少し引用が多いですが、ご了承を。

At Thu, 13 Oct 2011 00:49:11 +0900,
Masakazu Takahashi wrote:
> 
> 2011/10/12 長南洋一 <cyoic****@maple*****>:
> > 長南です。
> 
> レビューありがとうございます。以下のとおり変更しました。
> 
> https://github.com/emasaka/bash-jman/commit/fceaa6b918cb3b292b5c8a0e6bc13013305bc43f
> 
> >>>> .B BASH_CMDS
> >>>> .\"O An associative array variable whose members correspond to the internal
> >>>> .\"O hash table of commands as maintained by the \fBhash\fP builtin.
> >>>> .\"O Elements added to this array appear in the hash table; unsetting array
> >>>> .\"O elements cause commands to be removed from the hash table.
> >>>> 組み込みコマンド \fBhash\fP で扱うコマンドの内部的なハッシュテーブルに
> >>>> 対応する連想配列変数です。
> >>>> この配列に要素を追加すると、ハッシュテーブルにも追加されます。
> >>>> 配列から要素を削除すると、ハッシュテーブルから削除されます。

[...]

> > maintain に「操作」ではなく「管理」を選んだのも、三行目と四行目以下を
> > 区別しようという気持ちが働いたからです。もともと maintain という言葉は
> > 「操作」より「管理」に近いでしょうし。
> 
> 私の語感では、「管理」というと manage というか保持しているイメージで
> (喩えるとアパートの管理人)、maintain というのはそこに修繕などの行為を
> するイメージです(喩えるとアパートの内装工事をする人)。そういう意味で
> 「操作」という言葉を使いました。

WEBSTAR's の英英辞典によると、maintain は
  to keep in existence; preserve
  to keep in a certain condition or state
となっています。「きちんとした状態に保つ」というニュアンスで、
「維持管理」が近いと思います。修繕するといった行為は、「きちんとした状態に保つ」
ための手段になるのではないでしょうか。

訳に戻ると、
bash 自身が、bash が認識するコマンド群がハッシュテーブルに登録された状態に
保つという意味で「管理」を使うのが自然だと思っています。
少し微妙な点としては、組み込みコマンド hash が maintain するという部分で、
hash コマンドはハッシュテーブルを「操作」するためのもので、hash コマンドを
呼び出してハッシュテーブルを「管理」するのは bash 自身という点です。

> >>>> .B BASH_COMMAND
> >>>> .\"O The command currently being executed or about to be executed, unless the
> >>>> .\"O shell is executing a command as the result of a trap,
> >>>> .\"O in which case it is the command executing at the time of the trap.
> >>>> 現在実行しているか実行しようとしているコマンドです。
> >>>> ただし、トラップによりコマンドを実行しているときのコマンドは除きます。
> >>>
> >>> 「ただし」以下は、「ただし、トラップによって実行されるコマンドは
> >>> 除きます」で十分では。あるいは、原文どおり「ただし、トラップの結果
> >>> として、シェルが実行しているコマンドは除きます」か。
> >>>
> >>> それから、「in which case it is the command executing at the time of
> >>> the trap」の訳が抜けています。
> >>
> >> 前者の指摘で削っている部分が後者の指摘の部分かと思います。
> >
> > 素直に訳してみます (実際の動作の確認はしていません)。
> >
> >  現在実行しているか実行しようとしているコマンドです。
> >  ただし、トラップの結果として、シェルが実行しているコマンドについては
> >  話が別で (当てはまらず)、その場合 (変数に入っているの) は、トラップの
> >  発動時に実行していたコマンドになります。
> 
> この文を元に変更しました。

変更した文章 (or 部分) だけでよいので、
メールに載せて頂けると助かります。

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

別メールでコメントしていますが、もう少し考えてみました。

show-all-if-unmodified の説明を合わせて考えると、
"unmodified" = "without any possible partial completion"
ではないでしょうか。

「途中までの一致がある」だと、「複数の選択候補があり、これ以上補完できない」
という原文のニュアンスが失われているように感じました。

> >>>> .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 しても元には戻りません。
> >>>
> >>> 原文の問題かもしれませんが、「この変数の特殊な性格はなくなります」
> >>> というのは、具体的にどういうことなんでしょう。
> >>> special properties という言葉は、変数 DIRSTACK, FUNCNAME, GROUPS,
> >>> HISTCMD, RANDOM, SECONDS でも使われています。
> >>
> >> わかりやすいところで、SECONDS の動作は以下のとおりです。

[...]

> >> 一度 unset したあとに値を設定すると、経過秒数を返す性質はなくなります。
> >
> > 説明をうかがえば、正しい訳だとわかりますが、「この変数の特殊な性格は
> > なくなります」という言い方は漠然としすぎていると思います。
> > こういうとき日本語では「bash に対する (とって) 特別な意味は (効果は、
> > 働きは、関係は) なくなります (失われます)」などと言うのではないで
> > しょうか。つまり、「特殊な」か「特別な」か「特有の」か、「性質」か
> > 「性格」か、あるいは properties をもっと具体的に表現した方がよいのか。
> > もうすこし訳語を練る余地があると思います。
> 
> 通常の(special ではない)変数と対比して「特殊」という意味だと思い、い
> ろいろ考えると「special」を「特殊」と訳すのが自然かと思いました。
> 「固有」という訳も考えましたが、「固有」だと「通常の(special ではな
> い)変数」との対比ではなく、それぞれの変数が違うニュンアンスになってし
> まうように感じました。

長南さんが気にされているのは、special の訳と、properties の訳の両方ですね。

properties の方ですが、
日本語で「性質」というと、化学物質等の振る舞いを連想させることが多く、
変数の「性質」というのはあまり言わない表現だと思います。
どちらかというと、変数が持つ「役割」とか「意味」の方がしっくり来る気がします。

special の方は、「特別な」か「特殊な」あたりかなと思います。

全体としては「変数が持つ特別な役割がなくなります」を推しておきます。
特別→特殊、役割→意味 に置き換えても誤解は生まないと思います。

> >>>> .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
> >>>> の各要素に対応し、呼び出しスタックを表します。
> >>>
> >>> can be used with と「組になっている」では微妙に違うのではないでしょうか。
> >>> 確かに、一番言いたいのは、そういうことなんでしょうけれど。
> >>
> >> 3 つの変数が関連している含みを持たせて、上記のようにしてあります。
> >>
> >>> describe というのは、「小学館ランダムハウス英和辞典」には、
> >>> 「対象物の外観・性質・属性などを明かにするためのイメージまたは印象を
> >>> 言葉によって伝達すること」と注が付いていますから、「表す」というより
> >>> 「説明する」に近いと思います。ここでは、「FUNCNAME の各要素は、
> >>> BASH_LINENO や BBASH_SOURCE に対応する要素を持ち、(その三つが一緒に
> >>> なって) call stack についての情報を提供している」ということでは
> >>> ないでしょうか。「例えば、${FUNCNAME[$i]} は」以下が、その情報の
> >>> 具体例になるわけです。
> >>
> >> “要素が情報を提供する”というのは違和感があります。
> >
> > 違和感があるかどうかはたいした問題ではありません。
> 
> そうですか。
> 
> > 訳し方について
> > わたしの考えを示すために書いた訳例にすぎませんから。
> >
> > 問題は、「FUNCNAME  の各要素は ... 呼び出しスタック (そのもの) を
> > 表す」のではなく、呼び出しスタックについての情報を保持・提供
> > しているだけだということです。だから、原文は indicate とか mean
> > ではなく、describe という言葉を使っているわけです。
> >
> > 何でも構いませんが、describe の訳語として、「述べる、記述する、
> > 描写する、説明する」といった意味を含みに持つ表現を捜す必要が
> > あると思います。
> >
> > 「BFUNCNAME の各要素は ... 呼び出しスタックについての (に関する)
> > 情報を表しています」や「... 情報を保持しています」はあるかも
> > しれません。前者はちょっと苦しい気がするし、後者は describe から
> > かなり離れてしまいますが。
> 
> 手元の英和辞典いくつかに「表現する」という訳語があったため、
> 「表現します」と変更しました。

> >>>> .\"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
> >>>> の各要素に対応し、呼び出しスタックを表します。

各要素は呼び出しスタックの各要素に対応しているのであり、
呼び出しスタック(全体)を表現しているわけではないですね。
なかなか難しいですが、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 進値を代入します。スクリプトや関数の内部でない場合には、
> >>>
> >>> Each は生かした方がよいと思います。assigns ではなく、substitutes
> >>> ですから、「代入」を使うなら、「代入し直す」では。
> >>
> >> 「Each」のニュアンスは「current」に含まれるとして、「代入」はおかしいで
> >> すね。
> >> 「〜10 進値になります」に変更します。
> >
> > これは元訳のままだったのですね。each にしろ、substitute にしろ、
> > 具体的な意味を持っているのですから、きちんと訳出しないと、文章から
> > 具体性が失われると思います。substitude は、変数に既に入っている値を
> > 現在の値で入れ替えると言っているのでしょう。だからこそ、each time の
> > 意味が利いてくるのですし。
> >
> >  この変数が参照されるたびに、シェルはスクリプトや関数における現在の
> >  行番号 (1 から始まります) を表す10 進数を代入し直します。
> >
> > 一例として前の訳をいじってみましたが、この方が具体的でしょう。
> 
> 前のメールに書いたように、「代入」はおかしいと思います。
> each や substitute を生かすということで、以下のように変更します。
> 
>     この変数が参照されると、その場所ごとに、
>     スクリプトや関数における現在の行番号 (1 から始まります) を表す
>     10 進値に置き変わります。

「Each」のニュアンスが「current」に含まれるとのコメントがありましたが、
著者が「Each time ...」といっているのは、普通のシェル変数は値を保持していて、
何度参照されても保持している値を返すだけなのに対して、
LINENO の場合には、変数が参照された際に、(保持している値を返すのではなく)
「その都度」変数の内容を更新して返す、ということを言いたかったのではないでしょうか。

substitute についてですが、
変数の内容を変更する行為は「代入」(substitution) というと思います。
LINENO という変数を参照する側から見ると、LINENO の内容が更新されているので、
「代入」という表現は正しいのではないでしょうか。

案を考えてみました。いかがでしょうか?

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

> >>>> .B READLINE_POINT
> >>>> .\"O The position of the insertion point in the
> >>>> .\"O .B readline
> >>>> .\"O line buffer, for use with
> >>>> .B readline
> >>>> の編集バッファでのポイントの位置です。
> >>>
> >>> insertion の訳がありませんが、なくても同じことですか。
> >>
> >> はい。
> >
> > インサーション・ポイント (挿入ポイント) なら、位置が限定されますが、
> > ポイントと言っただけでは、位置が限定されないのでないかと思うのですが。
> 
> これも後述になってしまうのですが、「READLINE ライブラリ」のセクションで
> 以下のように説明されています。
> 
>     以下の説明では、ポイント (point) は現在のカーソルの位置を表し、
> 

別メールでもコメントしておりますので、ご検討頂ければ幸いです。

> >>>> .B SHLVL
> >>>> .\"O Incremented by one each time an instance of
> >>>> .\"O .B bash
> >>>> .\"O is started.
> >>>> .B bash
> >>>> の実体が起動されるたびに 1 ずつ増えます。
> >>>
> >>> 「実体」というのは、instance の訳として熟しているのですか。
> >>> instance の訳はむずかしいものです。この場合は、bash の中で
> >>> bash を起動し、またそこから bash を起動する、それが何回行われたか
> >>> ということのようですが。
> >>
> >> この instance はほぼプロセスと同じ意味かと思います。
> >> bash を起動するとプロセスが起動するのは自明であり、
> >> 「実体」という言葉の扱いが難しいようですので、
> >> 「の実体」を削りました。
> >
> > こうなさったのですね。
> >
> >  SHLVL    bash が起動されるたびに 1 ずつ増えます。
> >
> > xterm から xterm を起動すれば、二番目の xterm の $SHLVL は 2 に
> > なりますが (一番目の xterm の $SHLVL は 1 のまま)、WM のメニューや
> > アイコンから xterm をいくつ起動しても、みんな $SHLVL は 1 です。
> > ですから、訳には言葉がもう少し必要な気がします。
> >
> > ちょっと苦しまぎれですが、すぐ思いつくのは、「(bash から) bash が
> > 起動されるたびに」とカッコを使うことです。あるいは、instance を
> > 「インスタンス」とカタカナにしておく手もあると思います。読者に意味は
> > 通じないかもしれませんが、少なくとも、bash が単に起動されることを
> > 言っているのではないのだ、ということは伝わるでしょうから。
> >
> > 何かよい訳を思いつかれることを期待しています。
> 
> 少し意訳が入りますが、“何に対して増えるのか”が誤解のもとのようなので、
> 以下のように変更しました。
> 
>     bash が起動するときに、環境変数で渡された値から 1 増やした値が
>     設定されます。

別メールでもコメント致しましたが、
個人的には、この表現は誤解も少なく、いい意訳かなと思います。
-- 
Akihiro MOTOKI <amoto****@gmail*****>




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