$(git ls-files -s | wc -l)和$(git ls-files -s&gt; out&amp;&amp; wc -l <​​out)

时间:2017-03-06 18:08:04

标签: linux git sh git-ls-files

之间的差异=“”

两个命令$(git ls-files -s | wc -l)$(git ls-files -s >out && wc -l <out)是否不同或相同, 当第一个以第二种形式写出时,我最终会收到错误。

1 个答案:

答案 0 :(得分:3)

将一个程序的输出传输到另一个程序的输入时,如:

$(git ls-files -s | wc -l)

......程序同时运行。 wc会在收到行后立即开始计算。管道还将git的输出定向到wc的输入而没有任何中间文件。

请注意,在这种情况下,即使wc命令由于某种原因失败,git也会运行,因此您将获得wc输出(在大多数情况下,{{1} }})。

在你的第二个例子中:

0

... $(git ls-files -s >out && wc -l <out) 命令首先运行,并将其结果存储在名为git的文件中。然后,如果成功,out运行并计算行数。由于wc,如果&&命令失败,git将无法运行。在任何一种情况下,您都会有一个名为wc的文件,其中包含out命令的结果。

管道通常更好;它运行得更快,如果你不需要保留中间结果,它就不会有任何副作用。