bash:文字をエスケープせずに変数にテキストを入れる

bash:文字をエスケープせずに変数にテキストを入れる

この文字列を変数にエスケープすることを心配することなく、変数に入れたいと思います。

j!'^+%&/()=1!'^+%&/()c

試み1:(失敗)

VAR='''j!'^+%&/()=1!'^+%&/()c'''
bash: !'^+%: event not found

どうすればいいですか?

答え1

~からこの回答:

$ IFS='' read -r -d '' var <<'EOF'
j!'^+%&/()=1!'^+%&/()c
EOF
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

または、シェル以外のプログラムを介して入力を許可しますcat

$ var=$(cat)
j!'^+%&/()=1!'^+%&/()c        
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

入力後+をEnter押します。CtrlD

またはbash以下を使用してくださいprintf

$ xargs -0 printf "\n%q\n"
j!'^+%&/()=1!'^+%&/()c
'j!'\''^+%&/()=1!'\''^+%&/()c'
$ var='j!'\''^+%&/()=1!'\''^+%&/()c'
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

ここであなたが必要ですいいえを押して+をEnter押します。CtrlD 二重引用したいテキストを入力した後

答え2

私はこれをたくさん行い、常に文字列全体を二重引用符で囲み、二重引用符(\ ")またはドル記号(\ $)をエスケープすることにしました。これは他のものよりも覚えやすいです。

よく見落とされる別の技術は、隣接する文字列を異なる引用符で連結することです。

VAR=" string without double-quotes "' string with "double-quotes" '

ここでは、引用符が目立つようにスペースを追加しました。二重引用符と中二重引用符の間には、スペースや何も含めてはいけません。これは、それぞれ最初の文字列の終わりと2番目の文字列の先頭にあります。隣接する2つの文字列が連結されます。

関連情報