私はいつもbashが二重引用符なしで、または二重引用符で使用するときにバックスラッシュを同じように扱うと思いましたが、間違っていました。
[user@linux ~]$ echo "foo \ "
foo \
[user@linux ~]$ echo foo \ # Space after \
foo
だから、二重引用符を使用すると、バックスラッシュが常に印刷されると思いましたが、次のようになります。
[user@linux ~]$ echo "foo \" "
foo "
[user@linux ~]$ echo "foo \\ "
foo \
コードの最初の行にバックスラッシュが表示されるのはなぜですか?
ベストアンサー1
部分3.1.2.3二重引用符~のGNU バッシュマニュアル説明する:
$
バックスラッシュは、''、'`
'、'"
'、'\
'、または文字のいずれかが後に続く場合にのみ特別な意味を維持しますnewline
。二重引用符内では、これらの文字の1つに続くバックスラッシュが削除されます。特別な意味を持たない先行バックスラッシュ文字は変更されません。二重引用符の前にバックスラッシュを追加すると、二重引用符の中に二重引用符を入れることができます。有効にすると、!
二重引用符内に表示される""がバックスラッシュにエスケープされていない限り、記録拡張が行われます。 「」の前のバックスラッシュは!
削除されません。
したがって、\
二重引用符の処理は、一重引用\
符と外部引用符の\
処理とは異なります。文字を文字通り処理する位置にない限り、文字通り処理されます。この場合、その文字は二重引用符内で特別な意味を持つことができます。
\'
\?
、、などのシーケンスは文字通り\*
処理され、後でバックスラッシュは削除されず、二重'
引用符で囲まれている場合は特に意味がありません。?
*