[英]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.