日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux变量转义,关于linux:在Bash变量中转义awk参数

發布時間:2023/12/15 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux变量转义,关于linux:在Bash变量中转义awk参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想將awk命令存儲在一個變量中,以便稍后在自動腳本中使用。

如何在變量中存儲命令?

AUTO_SCRIPT="cp a b"

如何運行存儲的命令?

$AUTO_SCRIPT

現在,我要在此腳本中存儲awk命令:

awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces

(此awk通常會打印類似iface eth0 inet dhcp的內容。

所以我想把它存儲起來以便以后執行:

AUTO_SCRIPT="awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces"

但是,在嘗試執行時:

$AUTO_SCRIPT

awk: cmd. line:1: '/^iface/

awk: cmd. line:1: ^ invalid char ''' in expression

我試過什么?幾乎所有的事情。用字符轉義撇號。使用Qoute字符而不是撇號。嘗試使用(和)字符等。沒有效果。

我需要一些好主意。

參見bashfaq 50:我試圖在變量中放置一個命令,但是復雜的情況總是失敗的!正如它所說,"變量保存數據。函數保持代碼。不要把代碼放在變量中!"根據您實際嘗試完成的工作,常見問題解答中列出了許多備選方案。

擺脫使用所有大寫字母的習慣。太容易覆蓋敏感變量,如path。

另請參見pubs.opengroup.org/onlinepubs/9699919799/basedefs/…,第四段,建立環境和shell變量所用的所有caps名稱,這些變量對shell或posix定義的工具有意義,并為應用程序保留至少一個小寫字符的名稱:為自己的變量使用小寫名稱不僅僅是一個好方法。想法,它實際上被供奉在POSIX中。

不要將命令保存在變量中,沒有理由這樣做,因為這樣做既笨拙又容易出錯。只需創建一個調用awk腳本的shell函數。例如($是我的提示):

$ auto_script() { echo 'hello world'; }

$ auto_script

hello world

只需對awk腳本執行相同的操作:

auto_script() { awk -v par='eth0' '/^iface/ && $2==par' /etc/network/interfaces; }

將命令放入函數中是最干凈的解決方案。另一種解決方案是將命令放入數組中。

auto_script=( awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces )

然后像這樣執行

"${auto_script[@]}"

請閱讀提供給您的bashfaq 50鏈接。

除非使用其他類似于數組的機制,否則看起來您不能這樣做。

當調用$AUTO_SCRIPT時,shell按空白分割內容,產生以下參數:awk、-v、par=\"eth0\"、'/^iface/、&&、$2==par、{print}'、/etc/network/interfaces。因此,awk(1)無法運行正確的程序,因此會出現錯誤。

閱讀問題注釋中的bash faq鏈接。

@格倫納扎克曼謝謝。我沒有考慮過陣列;)

總結

以上是生活随笔為你收集整理的linux变量转义,关于linux:在Bash变量中转义awk参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。