如何在Bash中转义双字符串中的双引号?
例如,在我的shell脚本中
#!/bin/bash
dbload="load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"我无法让带双引号的ENCLOSED BY '\"'正确转义。我不能对我的变量使用单引号,因为我想使用变量$dbtable。
发布于 2010-10-01 05:07:44
使用反斜杠:
echo "\"" # Prints one " character.发布于 2015-03-01 04:50:43
在shell中转义引号的一个简单示例:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc这是通过完成一个已经打开的('),放置转义的(\'),然后打开另一个(')来完成的。
或者:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc完成已打开的报价('),在另一个报价("'")中放置报价,然后打开另一个报价(')。
发布于 2017-02-20 18:17:48
请记住,您可以通过使用需要回显的字符的ASCII代码来避免转义。
示例:
echo -e "This is \x22\x27\x22\x27\x22text\x22\x27\x22\x27\x22"
This is "'"'"text"'"'"\x22是双引号的ASCII码(十六进制),\x27是单引号的ASCII码。同样,您可以回显任何字符。
我想如果我们尝试用反斜杠回显上面的字符串,我们将需要一个杂乱的两行反斜杠的回显…:)
对于变量赋值,这是等效的:
a=$'This is \x22text\x22'
echo "$a"
# Output:
This is "text"如果该变量已经由另一个程序设置,您仍然可以使用sed或类似的工具应用双引号/单引号。
示例:
b="Just another text here"
echo "$b"
Just another text here
sed 's/text/"'\0'"/' <<<"$b" #\0 is a special sed operator
Just another "0" here #this is not what i wanted to be
sed 's/text/\x22\x27\0\x27\x22/' <<<"$b"
Just another "'text'" here #now we are talking. You would normally need a dozen of backslashes to achieve the same result in the normal way.https://stackoverflow.com/questions/3834839
复制相似问题