出现在输出中间的ls的内容

时间:2012-11-30 17:16:38

标签: bash

在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。

2 个答案:

答案 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")