bash:将文本放入变量中而无需转义字符

0 shell bash

我想将此字符串放入变量中,而不必担心转义其中的任何内容。

j!'^+%&/()=1!'^+%&/()c
Run Code Online (Sandbox Code Playgroud)

尝试1:(失败)

VAR='''j!'^+%&/()=1!'^+%&/()c'''
bash: !'^+%: event not found
Run Code Online (Sandbox Code Playgroud)

我该怎么办 ?

Tom*_*ale 5

这个答案

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

或者,使用与 shell 不同的程序接受输入cat

$ var=$(cat)
j!'^+%&/()=1!'^+%&/()c        
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$
Run Code Online (Sandbox Code Playgroud)

你输入后,按EnterCtrl+ D

或者,使用bash's printf

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

在这里,你需要Enter,但按Ctrl+D 两次输入文本后,不得转载。