为什么使用反引号时 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
不知道数据来自哪个文件)。
我是运行这一系列命令
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
不知道数据来自哪个文件)。