2015-04-17 50 views
1

据我所知,这是可以做到的东西一样评估的bash/zsh中表达直列

echo `ls` "foobar" 
echo $(ls) "foobar" 

但是当我尝试做一些像

diff `pip freeze` requirements.txt 
diff $(pip freeze) requirements.txt 

失败。

缺少什么我在这里?谢谢!

P.S我正在使用zsh shell。

回答

6

diff命令确实希望使用文件名作为参数,而不是字符串。喜欢的东西:

diff file1 file2 

diff "$string1" "$string2" 

如果你想diff的两个命令的输出(或你的情况的命令对静态文件的输出),您可以使用process substitution:

diff <(pip freeze) requirements.txt 

<()将的pip freeze输出重定向到一个文件在/dev/fd[0-9]。此文件名将传递到diff

+0

我没能得到,在我的'zsh'的设置工作,但那个曾在'bash'确定。谢谢。 – nunos

+0

我在'zsh'试过'diff <(echo foo)<(echo bar)',它工作正常。你正在使用哪个版本的'zsh'? – hek2mgl

+0

我使用的是'5.0.7'版本。我得到这个错误'错误:/ dev/fd/11:不支持的文件类型致命:不能散列/ dev/fd/11'。 – nunos

0

尝试

diff =(pip freeze) requirements.txt