POSIX シェル: 二重引用符内で、 `\` は `$`、```、````、`\`、または ` をエスケープできません。`?

POSIX シェル: 二重引用符内で、 `\` は `$`、```、````、`\`、または ` をエスケープできません。`?

~によるとPOSIX シェルコマンド言語ページ:

\

<backslash>エスケープ文字としての特別な意味は、次のいずれかの文字が続く場合にのみ保持する必要があります(エスケープ文字(バックスラッシュ)を参照)。特別だと思うとき:

$ ` " \ <newline>

これは、バックスラッシュを使用してこの5文字を​​エスケープすると、その文字をエスケープする効果がなく、「特別」でなければ文字通り処理しないことを意味するようです。

これを正しく解釈していますか?それでは\、この5つの特殊文字のうちの1つをaでエスケープ処理すると、意図したエスケープ効果が発生しない場合がありますか?

ベストアンサー1

@MichaelHomerがこれについて説明します。とても良いです。実際のケースを試してみましょうPS1='\$ '

$ echo "$ at start"
$ at start
$ echo "at end $"
at end $
$ echo "$before"

$ echo "after$"
after$

したがって、$単語の前に「special」を付けるだけです。パラメータの置換。これらすべての項目の前にバックスラッシュを追加するとどうなりますか?

$ echo "\$ at start"
$ at start
$ echo "at end \$"
at end $
$ echo "\$before"
$before
$ echo "after\$"
after$

「特殊」行だけが変更されました。今ドル記号は文字通り扱われます。それいつも文字通り受け入れました。他のキャラクターはどうなりますか?

$ echo "\ at start"
\ at start
$ echo "at end \"
> ^C
$ echo "\before"
\before
$ echo "after\"
> ^C

したがって、バックスラッシュは特殊文字ではなく、文字の前にある別のリテラル文字です。 (^ Cは、引用符がエスケープされているため、コマンドラインをキャンセルする必要がある場所です。)

おすすめ記事