每次运行以下bash命令时,都会出错:
以下是代码:
sort -b ./tests/out/$scenario > $studentFile
sort -b ./tests/out/$scenario > $profFile
$(diff $studentFile $profFile)
if [ $? -eq 0 ]
then
echo "Files are equal!"
else
echo "Files are different!"
fi
这是错误:
./test.sh: 2c2: not found
我基本上想要对两个文件进行排序,然后检查它们是否相等。我不明白的是这个错误意味着什么以及我如何摆脱它。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:5)
简短回答:使用
diff $studentFile $profFile
而不是:
$(diff $studentFile $profFile)
答案很长:
diff $studentFile $profFile
将提供多行的输出,在您的示例中,第一行是" 2c2"。如果将diff命令括在$()中,则此表达式的结果为" 2c2 ..."。这个结果现在由bash作为新命令使用,结果为"命令未找到:2c2"。
比较,例如:
$(diff $studentFile $profFile)
和
echo $(diff $studentFile $profFile)
*附录*
if diff $studentFile $profFile > /dev/null 2>&1
then
echo "equal files"
else
echo "different files"
fi
答案 1 :(得分:2)
你的命令
$(diff $studentFile $profFile)
执行在两个文件上运行diff
命令的结果。你的shell抱怨的2c2
可能是diff
输出中的第一个单词。
我假设您只想查看diff
的输出:
diff $studentFile $profFile
如果要在脚本中比较文件是否相等,请考虑使用cmp
:
if cmp -s $studentFile $profFile; then
# Handle file that are equal
else
# Handle files that are different
fi
diff
实用程序用于检查文件之间的差异,而cmp
更适合于简单地测试文件是否不同(例如,在脚本中)。
对于更专业的案例,有comm
实用程序可以比较已排序文件中的行。