我想在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
问题:
输出
******************
82c82 < ---------------------- --- > ---------------------
******************
./test.sh: line 32: [: too many arguments
Error ! different output
答案 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" == "" ]