
答え1
\
はシェルの引用演算子です。他の種類の引用符の外側では、\x
と同様になります'x'
(ただし、x
が改行文字の場合は除きます)。
それで:
echo \\\x
のようなものです:
echo '\''x'
または
echo '\x'
は、 (その名前)echo
を含む引数と を含む引数の 2 つで呼び出されます。echo
\x
POSIXに従ってecho
、オペランド (コマンド名以外の引数) のいずれかにバックスラッシュが含まれている場合、または最初のオペランドが である場合の動作は-n
指定されていません。それ以外の場合でも動作は異なることがわかります。
UNIX 仕様 (上記リンクで XSI を適用) によれば、 は標準エスケープ シーケンスの 1 つではないecho '\z'
ため、 の動作も未指定です。\z
ただし、の組み込みのecho
ようなUNIX 準拠の を使用すると、次のことが保証されます。echo
bash -o posix -O xpg_echo
echo '\\z'
と同じ:
echo \\\\z
または:
echo \\\\\z
を出力します\z<newline>
。
それ以外では、POSIX による保証は得られません。
実装では、z
または\z
またはno such escape sequence: \z
または NUL 文字が出力される可能性があります...
しかし、実際には、エスケープ シーケンスとして理解する実装は知らないので\z
、試したものはすべて\z<newline>
そこに出力されることがわかりました。
ポータブルで信頼性の高いテキスト出力方法が必要な場合は、使用しないでくださいecho
、printf
代わりに使用してください。
答え2
ステートメントエコーをセクションに分割する
\はbashがエスケープとして認識する変数です
したがって、\は文字「\」をエスケープし、\を印刷します。
\zは文字「z」をエスケープしているので、zを印刷します。
これらを合わせると、\z