Bash 管道中的传递函数参数
在一些帮助下,我在bash脚本中编写了一个函数:Bash 管道中的传递函数参数,bash,function,awk,pipe,parameter-passing,Bash,Function,Awk,Pipe,Parameter Passing,在一些帮助下,我在bash脚本中编写了一个函数: function test() { temp=$(cat /etc/passwd | grep $(whoami) | awk -F : "{print $`echo $1`}") echo "$temp" } 我给它一个数字X,它应该从passwd文件中的users条目打印第X列 echo $(test "3") …将给我第三列的条目。 我很难理解awk部分是如何工作的。回音是如何产生的 "{print $`echo $1`
function test() {
temp=$(cat /etc/passwd | grep $(whoami) | awk -F : "{print $`echo $1`}")
echo "$temp"
}
我给它一个数字X,它应该从passwd文件中的users条目打印第X列
echo $(test "3")
…将给我第三列的条目。
我很难理解awk部分是如何工作的。回音是如何产生的
"{print $`echo $1`}"
从管道中访问函数
$1
,而不是$1
?您混淆了awk和shell,误解了awk的用途以及一些shell基础知识,因此造成了复杂的混乱。您所需要的只是:
mytest() {
awk -F':' -v col="$1" -v me="$(whoami)" '$1==me{print $col}' /etc/passwd
}
mytest 3
我将函数“test”重命名为“mytest”,因为“test”是shell内置的名称
获取Arnold Robbins的《有效的Awk编程》第四版和Chris Johnson的《Shell脚本食谱》。你把Awk和Shell混为一谈,误解了Awk的用途以及一些Shell基础知识,因此造成了一个复杂的混乱。您所需要的只是:
mytest() {
awk -F':' -v col="$1" -v me="$(whoami)" '$1==me{print $col}' /etc/passwd
}
mytest 3
我将函数“test”重命名为“mytest”,因为“test”是shell内置的名称
获取Arnold Robbins的《有效的Awk编程》第四版和Chris Johnson的《Shell脚本食谱》。我尝试将目前正在学习的一些新知识结合起来。谢谢你的建议,不客气。在你学习的地方要小心,因为在线脚本和教程95%都是胡说八道。无论您阅读了哪些导致您创建的shell和awk脚本,请删除这些书签!我试着结合一些我目前正在学习的新东西。谢谢你的建议,不客气。在你学习的地方要小心,因为在线脚本和教程95%都是胡说八道。无论您阅读了哪些导致您创建的shell和awk脚本,请删除这些书签!