在echo $()中包装bash脚本调用时,我遇到了一个非常奇怪的情况。这很奇怪,我不知道要呈现什么代码,所以我将描述一般情况。我有一个脚本,我们称之为“run.sh”,它有一些输出。这通常格式很好,有空格和换行符。
我试图将此输出与我之前运行它时获得的值进行比较。为此,代码通过检查这两个值是否相同来比较“new”值和旧值,即:
expression=$(./runProcess.sh "$process");
expected=$(cat UnitTests/expect-process-$process);
if [ "$expression" == "$expected" ]; then
显然要获得“旧”值以与未来的测试进行比较,我需要手动计算$(./runProcess.sh)
。当我这样做时,我得到一个版本的输出明显更少的空格。然而,这显然是错误的,因为ls
的内容在它的中间出现了。我的意思是我得到以下类型的输出运行这两个命令:
./runProcess.sh g,g:
R2With2Gluons =
+ ncol*i_*pi_^2*A*g^2 * (
- 17/24*d_(mu1,mu2)*d_(m1,m2)*p1.p1
- 31/8*d_(mu1,mu2)*d_(m1,m2)*p1.p2
- 17/24*d_(mu1,mu2)*d_(m1,m2)*p2.p2
+ 7/12*d_(m1,m2)*p1(mu1)*p1(mu2)
+ 1/24*d_(m1,m2)*p1(mu1)*p2(mu2)
+ 89/24*d_(m1,m2)*p1(mu2)*p2(mu1)
+ 7/12*d_(m1,m2)*p2(mu1)*p2(mu2)
);
0.01 sec out of 0.01 sec
echo $(./runProcess.sh g,g):
R2With3Gluons = + coeff(m1,m2,m3)*ncol*pi_^2*A*g^3 Auto Diagrams UnitTests colourCalc.frm form.set functions.frm output.frm process.frm process.mid qgraf2form.frm qgrafProcessor.py runProcess.sh runProcesses.sh test vertices.frm ( + 35/24*d_(mu1,mu2)*p1(mu3) - 35/24*d_(mu1,mu2)*p2(mu3) - 35/24*d_(mu1,mu3)*p1(mu2) + 35/24*d_(mu1,mu3)*p3(mu2) + 35/24*d_(mu2,mu3)*p2(mu1) - 35/24*d_(mu2,mu3)*p3(mu1) ); 0.40 sec out of 0.40 sec
这是ls:
ls:
Auto form.set process.mid runProcesses.sh
Diagrams functions.frm qgraf2form.frm test
UnitTests output.frm qgrafProcessor.py vertices.frm
colourCalc.frm process.frm runProcess.sh
如果有必要,我可以提供确切的例子,但我希望这足以说明问题。为什么会发生这种情况?我在OS X Mountain Lion上使用bash。
答案 0 :(得分:1)
没有你的确切脚本很难说,但对于初学者来说,你的比较:
old == $(./run.sh);
应该是:
if [[ "$old" == "$(./run.sh)" ]]; then
答案 1 :(得分:1)
使用更多报价!!!
尝试:
echo "$(./run.sh)"
代替。 (是的,带引号)。
尝试:
old=$(./run.sh)
echo "$old"
您将获得正确的输出(引号为$old
)。现在,关于你的测试,请按照sampson-chen的建议使用:
[[ "$old" == "$(./run.sh)" ]]
(在分配变量old
时,您不需要引用变量或命令替换,但是,作为一般规则,您可以每次使用引号 )。 ((请参阅戈登戴维森对这篇文章的出色评论,我实际上已经投了很多,有一些关于球体和在[[ ... ]]
内引用变量的注意事项))。
编辑。在您编辑帖子后,我发现您使用效率低下的cat
。而不是:
expected=$(cat UnitTests/expect-process-$process)
请使用
expected=$(< "UnitTests/expect-process-$process")