我剛纔想這從我的shell腳本和結果使用bash變量並未如預期從內部AWK
REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'
它沒有找到$ REF即使文本包含它
推薦!
我剛纔想這從我的shell腳本和結果使用bash變量並未如預期從內部AWK
REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'
它沒有找到$ REF即使文本包含它
推薦!
你問題的措辭真的差...
無論如何,我認爲你想這樣的:
REF=SEARCH_TEXT
echo "some text" | awk "/$REF/{print \$2}"
注$2
轉義和雙引號。
或本:
REF=SEARCH_TEXT
echo "some text" | awk "/$REF/"'{print $2}'
注意合理使用雙和單引號和$2
沒有逃脫。
你必須使用外殼擴展,否則將包括出口shell變量,並使用它與awk的環境 - 這是矯枉過正在這種情況下:
export REF=SEARCH_TEXT
echo "some text" | awk '{if (match($0, ENVIRON["REF"])) print $2}'
我認爲awk進行不支持/.../ guard中的變量。 如果我錯了,請糾正我。
$ 2在沒有\的情況下工作良好。問題是關於$ REF,awk沒有花費。 thx – vehomzzz 2010-12-23 14:10:55
@Fritschy:對於很多使用互聯網的人來說,英語不是他們的第一語言,有些人使用Google來翻譯他們的問題。 ;-) – 2010-12-23 14:11:01
vehomzzz,當使用雙引號時 - 這是我在roder中建議讓shell正確地擴展`$ REF`,你必須轉義`$ 2` - 最終防止shell擴展它。 – 2010-12-23 14:12:29
,而不是在shell引用遊戲,使用-v
選項shell變量傳遞作爲一個awk變量:
awk -v ref="$REF" 'match($0, ref) {print $2}'
如果$REF
是文本,而不是一個正則表達式,使用index()
函數,而不是match()
。
在gawk
中,您有ENVIRON
數組,例如, awk 'END{print ENVIRON["REF"]}' /dev/null
將打印您的變量,如果您已將export
從外殼編輯到子過程。
[將shell腳本變量傳遞給awk命令](http://superuser.com/questions/203819/passing-a-shell-script-variable-into-an-awk-command) – ephemient 2010-12-23 15:34:48