Как я уже сказал в комментарии, я подозреваю, что ваш файл скрипта имеет DOS / Windows окончания строк; см. этот вопрос .
Кроме того, поскольку выполняемое вами сравнение - это всего лишь одна строка, это легко сделать как сравнение строк (вместо сохранения строк в файлах и использования средство сравнения файлов, например diff
или cmp
):
#!/bin/sh
gcc -Wall hello.c -o hello
if [ "$(./hello)" = 'Hello World!' ]; then
echo Same
else
echo Different
fi
Примечания: $( )
является «подстановкой команд»; он запускает содержимое как команду, захватывает его выходные данные и подставляет его в командную строку в этой точке. Двойные кавычки, которые предотвращают его разделение на «слова» (т. Е. «Hello» и «World!», Рассматриваются как отдельные слова) и вещи, похожие на символы подстановки имен файлов, расширяются в списки соответствующих файлов. (Вы должны почти всегда ставить двойные кавычки вокруг подстановок команд и переменных, потому что эти эффекты могут вызывать странные проблемы.)