bashでcmpコマンドを使用して3つのテキストファイルを比較し、file1がfile2とは異なりますが、file1とfile3がまったく同じ場合は、これを実行したいと思います。ヘルプファイルによると、ファイルが同じ場合はcmpは0を出力し、ファイルが異なる場合はcmpは1を出力します。
if [ "cmp -s file1.txt file2.txt" != 0 ] && [ "cmp -s file1.txt file3.txt" == 0 ]; then
#Action
else
#Do nothing
fi
ただし、条件の一部は
if [ "cmp -s file1.txt file2.txt" != 0 ]
単一のif条件としても使用できず、2番目の条件も使用できません。これは、両方のファイルが同じか異なる場合も同じように動作するためです。私は何が間違っていましたか?
答え1
リテラルテキストを文字列とcmp -s file1.txt file2.txt
比較しており0
、文字列は絶対一致しません。代わりにこれを使用してください。
if ! cmp -s file1.txt file2.txt && cmp -s file1.txt file3.txt
then
#Action
fi