[英]single quote escaping in bash within single quoted string
问题
我正在尝试自动创建一个kickstart文件,而我用来解析该文件的工具需要将kickstart作为字符串提供在单引号中。
除了使用awk的postinstall脚本(因此在单引号内包含单引号)之外,大多数方法都很好。
我查看了其他一些帖子,并尝试转义字符串,但无济于事。
我显然误解了转义的一些基本原理。
编码
DATA='
GATEWAY=$(localcli network ip route ipv4 list | grep default | awk \'{print $3}\')
'
echo ${DATA}
所需的输出
这是我想看到的文字输出字符串。
GATEWAY=$(localcli network ip route ipv4 list | grep default | awk '{print $3}')
任何帮助将非常感激!
谢谢
马特
由于不能在单引号引起来的字符串中转义字符,因此必须在单引号之外进行操作:
~$ echo 'abc'\''cde'
abc'cde
或者,使用双引号引起来的字符串(需要转义$
)
DATA="
GATEWAY=\$(localcli network ip route ipv4 list | grep default | awk '{print \$3}')
"
有一种鲜为人知的第三种引号- $'...'
...'-可用于bash
在其中可以转义单引号:
DATE=$'GATEWAY=$(...| awk \'/default/ {print $3}\')'
(这也说明了为什么通常不需要将grep
到awk
中。)
如果必须在DATA
变量定义中使用单引号,则用cut
替换awk
可能是一种解决方法。
例如:
$ echo "first second third" > ex.txt
$ awk '{print $3}' ex.txt
third
$ cut -d" " -f3 ex.txt
third
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.