Bash 获取--qrencode版本输出的特定部分

Bash 获取--qrencode版本输出的特定部分,bash,text,awk,head,Bash,Text,Awk,Head,我试图只获取qrencode的版本号,但它不起作用。知道为什么吗 $ qrencode --version | head -1 | awk '{print $3}' qrencode version 3.4.4 Copyright (C) 2006-2012 Kentaro Fukuchi 我很困惑,因为这种技术在大多数软件包中都可以很好地使用: $ gzip --version | head -1 | awk '{print $2}' 1.6 编辑:感谢您的帮助。这是因为对于qrencod

我试图只获取
qrencode
的版本号,但它不起作用。知道为什么吗

$ qrencode --version | head -1 | awk '{print $3}'
qrencode version 3.4.4
Copyright (C) 2006-2012 Kentaro Fukuchi
我很困惑,因为这种技术在大多数软件包中都可以很好地使用:

$ gzip --version | head -1 | awk '{print $2}'
1.6

编辑:感谢您的帮助。这是因为对于
qrencode
而言,
--version
的输出被打印到stderr而不是stdout。根据so回复评论,这在一定程度上是常见的。对我来说有点奇怪,但很公平。

您可以将stderr重定向到stdout:

qrencode --version 2>&1 | head -1 |  awk '{print $3}'
                   ^^^^
输出:
3.4.4

如果您想摆脱
head-1
并使用
awk
获得相同的结果,请使用

qrencode --version 2>&1 | awk 'NR==1{print $3}'

有关详细信息,请参见。

请尝试以下内容

qrencode --version 2>&1 | awk 'FNR==1{print $3;exit}'

好啊那么这是否意味着qrencode使用stderr来打印版本而不是stdout?奇怪的这很常见吗?@Zorglub29根据我的经验,这在某种程度上是很常见的。