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参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学而思学习机已上线AI讲题机器人
- 下一篇: 比亚迪秦PLUS DM-i 2023冠军