簡體   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