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
$

或者,通过与 shell 不同的程序接受输入cat

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

输入后,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
$

在这里,你需要不是Enter,但按Ctrl+D 两次输入要引用的文本后。

答案2

我做了很多这样的事情,并决定始终将整个字符串括在双引号中,并转义任何双引号 (\") 或美元符号 (\$)。这比其他任何事情都更容易记住。

另一种经常被忽视的技术是在不同的引号内连接相邻的字符串。

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

在这里,我添加了额外的空格,以便引号脱颖而出。双引号和中间的单引号之间不能有空格或任何内容。它们分别位于第一个字符串的末尾和第二个字符串的开头。相邻的两个字符串连接起来。

相关内容