繁体   English   中英

在bash中用单引号引起来的单引号转义

[英]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}\')'

(这也说明了为什么通常不需要将grepawk中。)

如果必须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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM