如何在一个双引号里面加双引号?
任何人都可以告诉我如何在bash中双string内部双引号转义?
例如在我的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 \"双引号转义。我不能使用单引号为我的variables,因为我想使用variables$dbtable 。 
使用反斜杠:
 echo "\"" # Prints one " character. 
在shell中转义引号的简单例子:
 $ echo 'abc'\''abc' abc'abc $ echo "abc"\""abc" abc"abc 
 这是通过完成已经打开的一个( ' ),放置一个( \' ),然后打开另一个( ' )。 
或者:
 $ echo 'abc'"'"'abc' abc'abc $ echo "abc"'"'"abc" abc"abc 
 这是通过完成已经打开的一个( ' ),在另一个报价( "'" ),然后打开另一个( ' )报价。 
更多示例: 在单引号string中转义单引号
Bash允许你相邻地放置string,他们最终会被粘在一起。
所以这:
 $ echo "Hello"', world!' 
产生
 Hello, world! 
诀窍是根据需要在单引号和双引号string之间交替。 不幸的是,它很快变得非常混乱。 例如:
 $ echo "I like to use" '"double quotes"' "sometimes" 
产生
 I like to use "double quotes" sometimes 
在你的例子中,我会做这样的事情:
 $ dbtable=example $ dbload='load data local infile "'"'gfpoint.csv'"'" into '"table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '"'"'"' LINES "'TERMINATED BY "'"'\n'"'" IGNORE 1 LINES' $ echo $dbload 
产生以下输出:
 load data local infile "'gfpoint.csv'" into table example FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "'\n'" IGNORE 1 LINES 
很难看到这里发生了什么,但是我可以使用Unicode引号对它进行注释。 以下在bash中不起作用 – 这只是为了说明:
  dbload= ' load data local infile " ''' 'gfpoint.csv' “' " into '“ table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY ' '' ' LINES ''' TERMINATED BY " ' '\n' ' " IGNORE 1 LINES ' 
 上面的“”“引号将被bash解释。 像" '这样的引号将会在结果variables中结束。 
如果我对前面的例子给予相同的处理,看起来像这样:
  $ echo “ I like to use ”   '' "double quotes" ''   “ sometimes ” 
检查出printf …
 #!/bin/bash mystr="say \"hi\"" 
不使用printf
 echo -e $mystr 
输出:说“嗨”
使用printf
 echo -e $(printf '%q' $mystr) 
输出:说“嗨”
我不知道为什么这个老问题今天在bash列表中猛增,但为了以防万一未来的研究人员,请记住,您可以通过使用您需要回声的字符的ascii代码避免转义。 例:
 echo -e "this is \x22\x27\x22\x27\x22text\x22\x27\x22\x27\x22" this is "'"'"text"'"'" 
  \x22是双引号的ASCII码(hex),单引号是\x27 。 同样,你可以回显任何字符。 
我想如果我们尝试回显上面的string与反斜杠,我们将需要一个凌乱的两行backslashed回声… 🙂
对于variables赋值,这是等价的:
 $ a=$'this is \x22text\x22' $ echo "$a" this is "text" 
如果这个variables已经被其他程序设置了,你仍然可以用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 
利用$“string”。
在这个例子中,
dbload = $“load data local infile \”'gfpoint.csv'\“into table $ dbtable FIELDS TERMINATED BY','ENCLOSED BY'\”'LINES TERMINATED BY \“'\ n'\”IGNORE 1 LINES“
注意(从手册页 ):
以美元符号($“string”)开头的双引号string将导致根据当前语言环境翻译该string。 如果当前的语言环境是C或POSIX,美元符号将被忽略。 如果string被翻译和replace,replace是双引号。
将双引号字符存储为variables:
 DQT = '“'
 echo“双引号$ {dqt} X $ {dqt}在双引号string”
输出:
双引号string中的双引号“X”
 在双引号之前加"\"来转义它,而不是\ 
 #! /bin/csh -f set dbtable = balabala set dbload = "load data local infile "\""'gfpoint.csv'"\"" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '"\""' LINES TERMINATED BY "\""'\n'"\"" IGNORE 1 LINES" echo $dbload # load data local infile "'gfpoint.csv'" into table balabala FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "''" IGNORE 1 LINES