
我想編寫一個函數來從 bash 中的後台作業清單中檢索欄位。例如取得特定參數。
假設我將 vim 發送到後台,因此“jobs”顯示此列表:
[1]+ Stopped vim ~/.bashrc
我的函數如下圖所示:
function jf {
echo `jobs | awk 'NR==$1{print $$2}'`;
}
然後我這樣稱呼它:
jf 1 4
我希望它會傳回第一行的第四列,即“~/.bashrc”,但事實並非如此。我究竟做錯了什麼?
答案1
您需要表明awk
您想要從 shell 變數傳遞值。在你的函數定義中類似這樣的東西應該可以解決問題:
function jf {
echo `jobs | awk -v LINENO=$1 -v COLUMNNO=$2 'NR==LINENO {print $COLUMNNO}'`
}
答案2
單引號使 bash 不能取代參數。正如 manatwork 所提到的,雙引號的解釋不太嚴格。
馬納特沃克寫道:
awk "NR==$1{print \$$2}"
儘管如此,我的函數中的「echo `...`」部分還是帶來了問題,但似乎我把事情變得過於複雜了,根本不需要它。這個新功能對我有用:
function jf {
jobs | awk "NR==$1{print \$$2}";
}