问题
我正在尝试自动创建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}')
非常感谢任何帮助!
由于
马特
答案 0 :(得分:2)
由于您无法在单引号字符串中转义字符,因此您必须在其外部进行转义:
~$ echo 'abc'\''cde'
abc'cde
或者,使用双引号字符串(需要转义$
)
DATA="
GATEWAY=\$(localcli network ip route ipv4 list | grep default | awk '{print \$3}')
"
答案 1 :(得分:1)
有一个鲜为人知的第三类引号 - $'...'
- 可用于bash
,您可以在其中转义单引号:
DATE=$'GATEWAY=$(...| awk \'/default/ {print $3}\')'
(这也说明了为什么经常不需要grep
awk
{。}}。
答案 2 :(得分:0)
如果必须在DATA
变量定义中使用单引号,则将awk
替换为cut
可能是一种解决方法。
e.g:
$ echo "first second third" > ex.txt
$ awk '{print $3}' ex.txt
third
$ cut -d" " -f3 ex.txt
third