私はinitスクリプトでこれを見ました。
echo $"Stopping Apache"
そのドル記号は何に使われますか?
これまでの私の研究:
Bashのマニュアルでこれを見つけました。
外側の引用符
設定すると、
$'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
答え1
ここでは2つの異なることが起こり、どちらもbash
マニュアルに文書化されています。
$ '
ドル記号一重引用符は特別な形式の引用です。
$ 'string'形式の単語は特別に扱われます。ワードは、ANSI C規格で指定されているように置き換えられたバックスラッシュエスケープ文字を使用して文字列に展開されます。
$」
ローカライズにはドル記号の二重引用符が使用されます。
ドル記号( '$')の前に二重引用符を付けた文字列を使用すると、その文字列は現在のロケールに従って翻訳されます。現在のロケールがCまたはPOSIXの場合、ドル記号は無視されます。文字列が翻訳されて置き換えられると、置換は二重引用符で囲まれます。
答え2
エスケープシーケンスは、文字列が内部的に展開されると$''
解釈されます。マンページから:
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
注:他のシェルでは、提供されているオプションなしでエスケープシーケンスが解釈される可能性があるため、異なる結果が得られます。
答え3
マニュアルを間違って理解しました。 $quoted文字列を使用している場合にのみ効果を見ることができます。~へ拡張${parameter}
。
$ echo "${v:-'ab\ncd'}"
'ab\ncd'
$ echo "${v:-$'ab\ncd'}"
ab
cd
ソースと追加資料:https://lists.gnu.org/archive/html/bug-bash/2005-10/msg00017.html