我想编写一个函数来从 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}";
}