web-dev-qa-db-ja.com

スクリプトに$ "dollar sign-prefix string"があるとはどういう意味ですか?

私はちょうどこれをinitスクリプトで見ました:

echo $"Stopping Apache"

そのドル記号は何ですか?

これまでの私の研究:

私はこれをbashのマニュアルで見つけました:

extquote

設定されている場合、$'string'および$"string"の引用は、二重引用符で囲まれた${parameter}の展開内で実行されます。このオプションはデフォルトで有効になっています。

...しかし$プレフィックスがある場合とない場合の文字列の違いは見つかりません:

$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in $PWD'
I am in $PWD
85
Ed Brannin

ここでは2つの異なることが行われ、どちらもbashマニュアルに記載されています

$ '

ドル記号の単一引用符は、引用符の特殊な形式です。

ANSI Cの引用

$ 'string'形式の単語は特別に扱われます。 Wordは文字列に展開され、バックスラッシュでエスケープされた文字はANSI C標準で指定されたとおりに置き換えられます。

$ "

ドル記号の二重引用符はローカライズ用です。

ロケールの翻訳

ドル記号( ‘$’)が前に付いた二重引用符で囲まれた文字列は、現在のロケールに従って文字列が翻訳されます。現在のロケールがCまたはPOSIXの場合、ドル記号は無視されます。文字列が翻訳および置換される場合、置換は二重引用符で囲まれます。

116
jw013

文字列が$''内で展開されると、エスケープシーケンスが解釈されます。マンページから:

Words of the form $'string' are treated specially. The Word expands to
string, with backslash-escaped characters replaced as specified by  the
ANSI  C  standard.

簡単な例は、改行の\ nエスケープシーケンスです。

$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo

$ 

注:echoはオプションを指定せずにエスケープシーケンスを解釈する場合があるため、他のシェルでは異なる結果が得られる場合があります。

24
jordanm