温馨提示:本文翻译自stackoverflow.com,查看原文请点击:bash - How to escape single quotes within single quoted strings

bash - 如何在单引号引起来的字符串中转义单引号

发布于 2020-03-30 21:46:05

假设您有一个Bash,alias例如:

alias rxvt='urxvt'

效果很好。

然而:

alias rxvt='urxvt -fg '#111111' -bg '#111111''

将无法工作,也不会:

alias rxvt='urxvt -fg \'#111111\' -bg \'#111111\''

那么,一旦转义了引号,如何最终匹配字符串中的开始和结束引号?

alias rxvt='urxvt -fg'\''#111111'\'' -bg '\''#111111'\''

看起来很笨拙,尽管如果允许您将它们串联起来,它将表示相同的字符串。

查看更多

提问者
cons
被浏览
28
15.4k 2016-04-12 02:34

如果您确实想在最外层使用单引号,请记住您可以同时粘贴两种引号。例:

 alias rxvt='urxvt -fg '"'"'#111111'"'"' -bg '"'"'#111111'"'"
 #                     ^^^^^       ^^^^^     ^^^^^       ^^^^
 #                     12345       12345     12345       1234

解释如何'"'"'解释为'

  1. ' 结束使用单引号的第一引号。
  2. " 使用双引号开始第二个引号。
  3. ' 带引号的字符。
  4. " 使用双引号结束第二个引号。
  5. ' 使用单引号开始第三引号。

如果您没有在(1)和(2)之间或(4)和(5)之间放置任何空格,则Shell会将该字符串解释为一个长字。