~によるとGNUドキュメント、
バックスラッシュは '$'、'''、'''、'\'、または改行文字のいずれかが後に続く場合にのみ特別な意味を保持します. 。
頑張った
p="a\$b";echo $p # a$b
p="a\`b";echo $p # a`b
p="a\"b";echo $p # a"b
p="a\\b";echo $p # a\b
すべてがうまくいった。ところで、新しいラインですか?
p="a\newlineb";echo $p # a\newlineb
文書の改行文字とはどういう意味ですか?
答え1
\n
Newlineは、通常Cで書かれた文字である改行文字の名前です。
$ p="a\
b"; echo "$p"
ab
結果ではab
ない\a<newline>b
からPOSIX規格によると:
引用符なしのAは、
<backslash>
a以外の後続の文字のリテラル値を保持する必要があります<newline>
。 aが<newline>
シェルの後に来ると、<backslash>
シェルはそれを行の連続として解釈します。入力をトークンに<backslash>
分割する前に削除する必要があります。<newline>
エスケープ文字は<newline>
入力から完全に削除され、スペースで置き換えられないため、トークン区切り文字として使用できません。
しかし、文字列はい二重引用符で囲む必要があります。まあ、これは特別なケースです。
<backslash>
特殊文字として処理され、次のいずれかの文字が続く場合にのみ、エスケープ文字として特別な意味を維持する必要があり ます 。$
、、、、、、 。`
"
\
<newline>
したがって、二重引用符で囲まれた文字列は、バックスラッシュの改行が次のように解釈されることを意味します。いいえ完全に引用されました。つまり、行の連続で動作し、バックスラッシュと改行文字が削除されます。
これは、変数を割り当てるのではp
なく、変数に割り当てるときに発生しますecho
。
また、見ることができますbash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク変数を参照する必要があるという点では常にそうです。