在管道中传递函数参数

时间:2018-02-07 10:56:24

标签: 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`}" 

从管道访问函数$1而不是$1

1 个答案:

答案 0 :(得分:3)

你正在混淆awk和shell并且误解了awk的用途加上一些shell基础知识,从而造成一个复杂的混乱。您所需要的只是:

mytest() {
    awk -F':' -v col="$1" -v me="$(whoami)" '$1==me{print $col}' /etc/passwd
}

mytest 3

我重命名了功能" test"到了#my;" mytest"自"测试"是内置shell的名称。

获得由Jonn Robbins撰写的有效Awk编程第4版和Chris Johnson的Shell Scripting Recipes。