シェルのクォート

ダブルクォート内のバックスラッシュによるクォートのルールは、C由来のクォート規則と異なる。\\newlineの箇所は原文が誤っているように思う。

The following characters have a special meaning to the shell and cause termination of a word unless quoted.

; & ( ) | ^ < > newline space tab

A character may be quoted by preceding it with a \. \\newline is ignored. All characters enclosed between a pair of quote marks (''), except a single quote, are quoted. Inside double quotes ("") parameter and command substitution occurs and \ quotes the characters \ ` " and $.

下記の文字はシェルにとって特別な意味を持ち、クォートされていなければワード終端を引き起こす。

; & ( ) | ^ < > newline space tab

任意の文字は先行する\によってクォートされうる。\\newlineは無視される。シングルクォートで囲まれた、シングルクォートを除くすべての文字はクォートされる。ダブルクォート内ではパラメータ置換及びコマンド置換が行われ、\は\ ` " $をクォートする。

Manual Page - sh(1)

bash(1)のほうが判りやすい。それにしても、クォートにあてる良い訳語はないものかな。

ダブルクォートで文字を囲むとクォート内部の全ての文字は文字としての値を保持しますが、$, `, \は例外となります。$と`はダブルクォートの内部でも特殊な意味を失いません。バックスラッシュの場合は、次の文字が$, `, ", \, のいずれかである場合に限り特殊な意味を失いません。前にバックスラッシュを付ければ、ダブルクォート文字をダブルクォートによるクォートの内部でクォートできます。

http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html#lbAQ

たとえば、シェルスクリプトディレクトリを完全パスで取得したいとする。パスが空白を含む場合を考えると、下記の二行を一行にまとめることは相当面倒だ。

here=`dirname "$0"`
here=`(cd "$here" && pwd)`

dirnameの可搬性についてはhttp://www.geocities.jp/fut_nis/html/autoconf-ja/Limitations-of-Usual-Tools.htmlを参照。