Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 管道中的传递函数参数_Bash_Function_Awk_Pipe_Parameter Passing - Fatal编程技术网

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`

在一些帮助下,我在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`}" 

从管道中访问函数
$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脚本,请删除这些书签!