バックスラッシュを含む変数の印刷

バックスラッシュを含む変数の印刷

私は次のようなものがあります:

A=$(curl https://mysite.com)

そしてカールリクエストは文字列を返します\"Hello World\"。これで、A次のいずれかを使用してコンソールに印刷したい場合:

echo "$A"
printf '%s' "$A"

消えた\。ただと書かれています"Hello World"\"Hello World\"コンソールに入るにはどうすればよいですか?

答え1

バックスラッシュが表示されない場合は、printf '%s' "$A"バックスラッシュが存在しません。curl https://mysite.com個別に確認できます。

たぶん、次の出力を見て混乱する可能性があります。

bash-5.0$ typeset -p A
declare -- A="\"Hello World\""

これは、変数を定義するために使用できるbashのシェルコード出力です$A。シェル言語の構文では、次の内容をエスケープして、これが閉じる引用符ではなくデータの一部であることをシェルに通知するために\使用されます。""

次の出力もあります。

declare -- A='"Hello World"'

同じように動作し、より安全です。またはA=\"Hello\ World\"など$'"Hello World"'はシェル言語構文の他の参照形式です。

関連情報