转自:https://blog.jysoftware.com/2015/12/bash-%E6%80%8E%E4%B9%88%E5%81%9A%E5%8D%95%E5%BC%95%E5%8F%B7%E5%B5%8C%E5%A5%97%EF%BC%9F/

单引号是无法嵌套的,因为bash的line扫描算法遇到下一个单引号就会和上一个直接配对,没有贪婪扫描的说法。

既然如此,实际上一个替代方案立即就会呈现出来:

 

 
1
'\''

 

这个序列首先提供一个闭合单引号,然后是一个命令行转义字符的单引号,最后提供一个开单引号,从而解决了问题。例如:

 

 
1
alias history-summary='history | awk '\''{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}'\'' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10'

 

查看你在shell中最常使用的命令的频度。

在BASH中,例如十六进制转义符“\x27”来表示单引号也是可以的,这是另一种达到单引号中嵌套单引号的办法。

如果直接使用“\’”转义字符会怎么样呢?我遗憾地告诉你,这种方案是要拼人品的,有可能产生语法错误,也可能顺利通过:

 

 
1
echo'abb\'fine'

 

最安全的是我们提出的第一种方法。

单引号是无法嵌套的,因为bash的line扫描算法遇到下一个单引号就会和上一个直接配对,没有贪婪扫描的说法。

既然如此,实际上一个替代方案立即就会呈现出来:

 

 
1
'\''

 

这个序列首先提供一个闭合单引号,然后是一个命令行转移字符的单引号,最后提供一个开单引号,从而解决了问题。例如:

 

 
1
alias history-summary='history | awk '\''{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}'\'' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10'

 

查看你在shell中最常使用的命令的频度。

在BASH中,例如十六进制转义符“\x27”来表示单引号也是可以的,这是另一种达到单引号中嵌套单引号的办法。

如果直接使用“\’”转义字符会怎么样呢?我遗憾地告诉你,这种方案是要拼人品的,有可能产生语法错误,也可能顺利通过:

 

 
 
 
 
 
C++
 
1
echo'abb\'fine'

 

最安全的是我们提出的第一种方法。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-24
  • 2021-07-25
  • 2021-10-06
  • 2022-02-01
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案