我正在尝试将下面的输出插入变量x
中。输出是一个字符串。我以前做过这个。
k="psz"
当我这样做时,它可以工作,并且在执行回声$x时获得预期的输出
x=$( awk -v a="k" -F '[:,]' '{ if($1 == "psz") print $5 }' /etc/passwd )
但是当我尝试在下面使用这个时,它不起作用
x=$( awk -v a="k" -F '[:,]' '{ if($1 == a) print $5 }' /etc/passwd )
它不起作用,回声$x
给了我一个空白行。
您正在使用字符串k
而不是变量$k
的值来设置a
。如果设置正确,代码将正常工作。看:
k='accdias'
x=$(awk -va=$k 'BEGIN{FS=":"} $1==a {print $5}' /etc/passwd)
echo $x
Antonio Dias
我正在编辑它以展示另一种在不使用-v
的情况下将变量值传递给您的awk
程序的方法:
k='accdias'
x=$(awk 'BEGIN{FS=":"} $1==ARGV[2] {print $5}' /etc/passwd $k)
echo $x
Antonio Dias
在上面的代码中,ARGV[0]
将被设置为awk
,ARGV[1]
将被设置为/etc/passwd
,最后ARGV[2]
将被设置为$k
值,该值在该示例中accdias
。
来自Ed Morton的编辑(见下面的评论(:
k='accdias'
x=$(awk -v a="$k" 'BEGIN{FS=":"} $1==a {print $5}' /etc/passwd)
echo "$x"
Antonio Dias
k='accdias'
x=$(awk 'BEGIN{FS=":"; a=ARGV[2]; ARGV[2]=""; ARGC--} $1==a {print $5}' /etc/passwd "$k")
echo "$x"
Antonio Dias