バックスラッシュの意味

バックスラッシュの意味

以下のコマンドが印刷されますが、Smith印刷されないのはなぜですか\Smith

echo \Smith

答え1

これバックスラッシュはシェル構文のエスケープ文字です。それ:

<newline>を除いて、後続の文字はリテラル値のままにする必要があります。 ... <バックスラッシュ> ...削除する必要があります。

改行文字やエスケープできるシェル特殊文字( 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 または タブ)ではないため、\S同じ意味を持ちますS。与えられた引数にリテラルバックスラッシュを含めるには、順番に、または別の引用演算子を使用してエスケープします。S$"'{[`\|&;<>()?*[#~=%echo\

echo \\Smith

または

echo '\Smith'

または

echo "\Smith"

\特別な意味は依然として二重引用符内に保持されますが、後ろにあるときは維持されず、後に、Sまたは\改行文字が来るときにのみ保持されます。`$"

多くのecho実装では、\引数で見つかったときに特別な処理を実行します(通常は従わないがS保証されません)、次のように使用できますprintf

printf '%s\n' '\Smith'

注:これは例で参照されていないケースに対して指定された動作ですが、別の方法で参照することも、ファイル内でread変更することもできます。

答え2

\SエスケープされたS場合は特殊文字ではないため提供されますS。印刷するにはバックスラッシュを2倍にする必要があります。echo \\Smith

編集:しかし、より一般的には、「y」(「x」はバックスペースで保護されています)といくつかのバージョン(ダッシュ、zsh)を出力し、「x \ by」を出力します。をprintf使用することの違いを確認することをお勧めします。echo x\\by\bechoprintf "%s\n" x\\by

関連情報