shell 在Bash中,在单引号字符串内进行单引号转义

5jdjgkvh  于 12个月前  发布在  Shell
关注(0)|答案(3)|浏览(134)

问题

我试图自动创建一个kickstart文件,我用来解析它的工具要求kickstart以单引号中的字符串形式提供。
它的大部分都很好,除了postinstall脚本使用AWK,因此单引号内的单引号。
我看了一些其他的帖子,试图摆脱字符串,无济于事。
我显然误解了逃跑的一些基本原则。

密码

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}')
but5z9lq

but5z9lq1#

因为你不能在单引号字符串中转义字符,所以你必须在它之外转义:

~$ echo 'abc'\''cde'
abc'cde

或者,使用双引号字符串(需要转义$

DATA="
GATEWAY=\$(localcli network ip route ipv4 list | grep default | awk '{print \$3}')
"
kzmpq1sx

kzmpq1sx2#

还有一种鲜为人知的第三种类型的引号-$'...'-可用于bash,您可以在其中转义单引号:

DATE=$'GATEWAY=$(...| awk \'/default/ {print $3}\')'

(This还演示了为什么通常不需要将grep通过管道传输到awk。)

8ehkhllq

8ehkhllq3#

如果您必须在DATA变量定义中使用单引号,则可以将awk替换为cut
例如:

$ echo "first second third" > ex.txt
$ awk '{print $3}' ex.txt
third
$ cut -d" " -f3 ex.txt
third

相关问题