3

例如:

myCleanVar=$( wc -l < myFile )
myDirtVar=$( wc -l myFile )

echo $myCleanVar
9

echo $myDirtVar
9 myFile

为什么在“myCleanVar”中我从“wc”命令中得到一个“整数”值,而在“myDirtVar”中我得到如下内容:“9 file.txt”?我引用“整数”是因为知道在 Bash shell 中默认所有都被视为字符串,但无法理解第一个和第二个表达式的行为差异。在这种情况下,重定向“<”的具体效果是什么?

4

2 回答 2

5

man页面wc说:

姓名

   wc - print newline, word, and byte counts for each file

概要

   wc [OPTION]... [FILE]...
   wc [OPTION]... --files0-from=F

描述

打印每个 FILE 的换行符、字数和字节数,如果指定了多个 FILE,则打印总行数。

因此,当您将文件作为参数传递时,它还将打印文件的名称,因为您可以传递多个文件wc以计算行数,因此您知道哪个文件具有该行数。当然,当您使用stdin它时,它不知道文件的名称,因此不会打印它。

例子

$ wc -l FILE1 FILE2
  2 FILE1
  4 FILE2
  6 total
于 2014-08-17T10:39:19.643 回答
4

wc默认情况下将列出文件名,允许您在多个文件上使用它(并为所有文件提供结果)。如果没有指定文件名,则使用通常是控制台输入的“标准输入”,并且不打印文件名。<需要指定“输入重定向”,即从给定文件读取输入而不是使用用户输入。

将所有这些信息放在一起,您就会得到wc示例中 ' 行为的原因

提问时间: 的输出是cat file | wc -l什么?

于 2014-08-17T10:41:56.490 回答