单引号是无法嵌套的,因为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”来表示单引号也是可以的,这是另一种达到单引号中嵌套单引号的办法。
如果直接使用“\’”转义字符会怎么样呢?我遗憾地告诉你,这种方案是要拼人品的,有可能产生语法错误,也可能顺利通过:
1
|
echo
'abb\'fine'
|
最安全的是我们提出的第一种方法。