这个想法是告诉两个给定的文件是否具有完全相同的内容,但不管是否存在差异。
e.g。如果file1是alpha
而file2是AlphA
,那么脚本file1 file2会给出相同的'。
如何使脚本案例不敏感?
#!/bin/bash
if cmp $1 $2 >/dev/null ; then
echo "Mostly the same."
else
echo "Different."
fi
答案 0 :(得分:4)
cmp
使用逐字节比较,因此您必须先进行自己的大小写转换:
if cmp -s <(tr '[:upper:]' '[:lower:]' <"$1") <(tr '[:upper:]' '[:lower:]' <"$2"); then
echo "Mostly the same."
else
echo "Different."
fi
-s
使cmp
无声 - 即如果存在差异,则不会打印出来。
<(...)
是process substitution,从宽松的角度讲,它使命令的输出显示为临时的,有效的自我删除文件;由于流程替换使用管道,因此使用它们可以节省内存并且工作均匀
具有大输出集。
tr '[:upper:]' '[:lower:]'
执行通过stdin提供的字符从大写到小写的区域设置感知转换,从而产生全小写输出。
另请注意$1
和$2
如何双引号以确保其值使用 as-is (double -quoting保护值不受shell expansions)。
答案 1 :(得分:1)
也许:
file1=$(cat $1 | tr '[:upper:]' '[:lower:]')
file2=$(cat $2 | tr '[:upper:]' '[:lower:]')
if [ "$file1" = "$file2" ]; then
echo "same"
else
echo "different"
fi
答案 2 :(得分:1)
如果文件足够小,您可以更简单地完成。
#!/bin/bash
f1="$(<"$1")"
f2="$(<"$2")"
if
[[ "${f1^^}" = "${f2^^}" ]]
then
echo "Mostly the same."
else
echo "Different."
fi