两个命令$(git ls-files -s | wc -l)
和$(git ls-files -s >out && wc -l <out)
是否不同或相同,
当第一个以第二种形式写出时,我最终会收到错误。
答案 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
命令的结果。
管道通常更好;它运行得更快,如果你不需要保留中间结果,它就不会有任何副作用。