コマンドが `echo \\z` 出力を \z として表示するのはなぜですか?

コマンドが `echo \\z` 出力を \z として表示するのはなぜですか?

このコマンドはecho $(echo \\\z)以下から来ます。この本 、なぜ出力されるのかわかりません。

\G

出力すればいいと思います。

ベストアンサー1

\シェルの参照演算子です。他のタイプの引用符の外にある場合(改行文字でない場合)\xと同じです。'x'x

だから:

echo \\\x

ように:

echo '\''x'

または

echo '\x'

So はecho2 つの引数で呼び出されます。 1つはecho(名前)を含み、もう1つはを含みます\x

POSIXによるとecho、オペランド(コマンド名以外の引数)にバックスラッシュが含まれている-n場合、または最初のオペランドが指定されていない場合、動作は指定されません。他にも行動が違うことがわかります。

上記リンクのXSIを適用するUNIX仕様によれば、標準エスケープシーケンスの1つではないecho '\z'ため、動作も指定されません。\z

ただし、UNIX準拠の組み込み関数echo(たとえば)を使用すると、次のことが保証されます。echobash -o posix -O xpg_echo

echo '\\z'

それは次のとおりです。

echo \\\\z

または:

echo \\\\\z

出力されます\z<newline>

それ以外は、POSIXからの保証はありません。

実装はzまたはまたはまたは\zNULno such escape sequence: \z文字を出力できます。

しかし、実際に私は\zエスケープシーケンスを理解する実装を認識していないので、私が試したすべての実装がそこから出力されることを発見しました\z<newline>

移植可能で安定したテキスト出力方法が必要な場合は、使用せず、echo代わりにprintf使用してください

おすすめ記事