为什么使用反引号时 bash return 文件目录?

Why does bash return the file directory when using a back tick?

我是运行这一系列命令

passwd=`wc -l /etc/passwd`

echo $passwd

Returns:

34 /etc/passwd

我需要做什么才能让它只显示 wc -l 的输出?

这是 wc 的默认行为:

» wc -l /etc/passwd                                     
28 /etc/passwd

无法告诉 wc 不输出文件名。

也许使用 awk

$ passwd=$(wc -l /etc/passwd | awk '{print }')
$ echo $passwd
32

使用 cut,来自 cut (GNU coreutils)

$ passwd=$(wc -l /etc/passwd | cut -d" " -f1)
$ echo $passwd
32

wc returns 也是文件名,但还有其他方法。一些例子:

passwd=`wc -l /etc/passwd | grep -o [1-9]\*`

passwd=`wc -l /etc/passwd | cut -f1 -d' '`

(此问题的答案:get just the integer from wc in bash

只需从标准输入读取而不是给wc一个文件名:

$ passwd=`wc -l < /etc/passwd`
$ echo "$passwd"
      86

wc 仍然输出了相当多的填充,但是省略了文件名(因为 wc 不知道数据来自哪个文件)。