diff навіть може повністю придушити вихід, за винятком повідомлення "Файли / бін / bash та / bin / sh відрізняються", використовуючи наведений нижче код.
file1="./helloworld$x.out"
file2="./output/helloworld$x.out"
if diff -q "$file1" "$file2"; then
echo "Passed $x"
else
echo "Failed $x"
fi
Якщо ви навіть хочете приховати це повідомлення, вам слід додати > /dev/nullпісля команди diff, щоб приховати вихід diff:
if diff -q "$file1" "$file2" >/dev/null; then
/dev/null це спеціальний файл, який виконує функцію чорного отвору, якщо ви напишете до нього, він не зникне, якщо читати з нього, ви нічого не отримаєте.
Зауважте, що bash не потрібно ;закінчувати рядки.
Що стосується початкового запитання, щоб зберегти вихід програми в змінній:
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
Альтернативні способи перевірити чи порожня змінна:
[ "$output" = "" ]
[ "$output" == "" ]
[[ "$output" == "" ]]
[[ $output == "" ]]
Якщо ви використовуєте Bash, останні дві команди рекомендуються для порівняння рядків. В іншому випадку перший і [ -n "$output" ]рекомендується.
... > /dev/nullробиться в цьому контексті. Вихід diff буде goto / dev / null, але хіба нічого?