首先,對潛在的重複問題表示歉意。我是bash腳本新手,我甚至無法找出一些要搜索的關鍵字。隨着中說,我試圖像我一樣可以簡化問題描述:Awk,gsub,&符號和意外擴展
我有一個文本文件(test.txt的)只包含此行:
REPLACE
我跑到下面的命令是應該用代碼變量值if (A & B)
替換文件的文本(即REPLACE
)。
code="if (A & B)" ; awk -v var="${code}" '{ gsub(/REPLACE/, var); print }' test.txt
預期輸出我期望要打印code
變量值是:
if (A & B)
實際輸出某種方式與符號擴展成 'REPLACE',這是gsub
的regexp參數:
if (A REPLACE B)
也許我需要逃避放大器ersand,但不幸的是,code
變量人口超出了我的控制範圍,所以我無法手動操作它的值。
FYI awk的版本是 「GNU awk中4.1.4 API:1.1(GNU MPFR 3.1.5,GNU MP 6.1.2)」
謝謝!
'&'的意思是「代替完全匹配「在awk正則表達式中,包括gsub。你需要轉義它:'code =「if(A \\&B)」'(是的,有兩個baclslashes,因爲shell也在擴展它) – grochmal