diff może nawet całkowicie wyłączyć dane wyjściowe, z wyjątkiem komunikatu „Pliki / bin / bash i / bin / sh różnią się” za pomocą poniższego kodu.
file1="./helloworld$x.out"
file2="./output/helloworld$x.out"
if diff -q "$file1" "$file2"; then
echo "Passed $x"
else
echo "Failed $x"
fi
Jeśli nawet chcesz ukryć tę wiadomość, musisz dołączyć > /dev/nullpo poleceniu diff, aby ukryć wynik diff:
if diff -q "$file1" "$file2" >/dev/null; then
/dev/null to specjalny plik, który działa jak blackhole, jeśli do niego napiszesz, zniknie, jeśli z niego czytasz, nic nie odzyskasz.
Zauważ, że bash nie musi ;kończyć linii.
Jeśli chodzi o oryginalne pytanie, aby zapisać dane wyjściowe programu w zmiennej:
file1="./helloworld$x.out"
file2="./output/helloworld$x.out"
output="$(diff -q "$file1" "$file2")"
# the quotes are mandatory, this checks whether $output is empty or not
if [ -n "$output" ]; then
echo "Passed $x"
else
echo "Failed $x"
fi
Alternatywne sposoby sprawdzenia, czy zmienna jest pusta:
[ "$output" = "" ]
[ "$output" == "" ]
[[ "$output" == "" ]]
[[ $output == "" ]]
Jeśli używasz Bash, do porównania ciągów zalecane są dwa ostatnie polecenia. W przeciwnym razie pierwszy i[ -n "$output" ] jest zalecany.
... > /dev/nullrobi w tym kontekście. Wyjście diff będzie goto / dev / null, ale czy to nic?