我想将此字符串放入变量中,而不必担心转义其中的任何内容。
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
$
输入后,Enter按Ctrl+ 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" '
在这里,我添加了额外的空格,以便引号脱颖而出。双引号和中间的单引号之间不能有空格或任何内容。它们分别位于第一个字符串的末尾和第二个字符串的开头。相邻的两个字符串连接起来。