Linux中的分隔符“,空格和bash脚本

时间:2013-08-18 13:38:26

标签: linux bash

我想在bash脚本(Linux)中检查两个文件是否相同。     我使用以下代码:

#!/bin/bash
… 
…
differ=$(diff $FILENAME.out_ok $FILENAME.out)
echo "******************"
echo $differ
echo "******************"
if [ $differ=="" ]
  then
   echo "pass"
 else
 echo "Error ! different output"  
 echo $differ   
 fi

问题:

  • diff命令返回空格并中断if命令

输出

 ******************
 82c82 < ---------------------- --- > ---------------------
 ******************
 ./test.sh: line 32: [: too many arguments
 Error ! different output

3 个答案:

答案 0 :(得分:3)

检查两个文件是否相同的正确工具是cmp

if cmp -s $FILENAME.out_ok $FILENAME.out
then : They are the same
else : They are different
fi

或者,在这方面:

if cmp -s $FILENAME.out_ok $FILENAME.out
then
    echo "pass"
else
    echo "Error ! different output"
    diff $FILENAME.out_ok $FILENAME.out
fi

如果你想使用diff程序,那么双引号你的变量(并在[命令的参数周围使用空格):

if [ -z "$differ" ]
then
    echo "pass"
else
    echo "Error ! different output"  
    echo "$differ"   
fi

请注意,在回显变量时需要对变量进行双引号,以确保在输出中保留换行符;如果你不这样做,everything is mushed onto a single line

或使用[[测试:

if [[ "$differ" == "" ]]
then
    echo "pass"
else
    echo "Error ! different output"  
    echo "$differ"   
fi

在这里,引用并不是条件中变量的严格必要条件,但像我这样的老式shell脚本编写者会自动无害地将它们放在那里。粗略地说,如果变量可能包含空格并且空格很重要,则应该双引号。当[[命令在双引号下工作正常时,我认为不需要学习特殊情况。

答案 1 :(得分:2)

而不是:

if [ $differ=="" ]

使用:

if [[ $differ == "" ]]

最好使用现代[[]]代替外部程序/bin/[

同时使用diff -b比较2个文件,而忽略空格

答案 2 :(得分:1)

@anubhava的回答是正确的, 你也可以用

if [ "$differ" == "" ]