Я написал программу c, которая работает, она работает на терминале. И я хотел запустить сценарий оболочки, чтобы проверить свой код. Проблема в том, что я не могу понять, как заставить вывод моей q1_sequence соответствовать моему ожидаемому значению.
#!/bin/sh
OUTPUT = "$(./q1_sequence 5 1 3 2 1)"
echo $OUTPUT
EXPECTED = "5 1 3 2 1 : returns a value of 99 and 15 iterations"
if [ "$OUTPUT" == "$EXPECTED" ]
then
echo "Test was true"
else
echo "Test was not true"
fi
Я ожидал, что это правда, и что консоль заявит, что это правда. однако я вообще этого не понимаю.
Что я получаю:
sh testing.sh
5 1 3 2 1 : returns a value of 99 and 15 iterations
testing.sh: 8: [: 5 1 3 2 1 : returns a value of 99 and 15 iterations: unexpected operator
Test was not true
Я не уверен, что я делаю неправильно, или что такое неожиданный оператор или был. Я пробовал много разных вещей, и я думаю, что что-то упускаю, но я не могу понять это. Я сделал ВЫВОД == "5 1 3 2 1 : возвращает значение 99 и 15 итераций"
Я пробовал много разных комбинаций, но я не могу просто понять это, поэтому любая помощь будет полезна.
попробуйте найти разницу в строках. duckduckgo.com/?q=bash+strings+difference&t=ffsb&ia=web. Возможный дублирующий вопрос.
При отображении вывода программы C на наличие неожиданных пробелов используйте что-то вроде echo "<$OUTPUT>"
. < >
нужны только для обнаружения дополнительных пробелов в начале или конце, которые иначе вы бы не увидели. Также используйте кавычки, между словами может быть несколько пробелов, и они будут скрыты без кавычек.
Используйте один знак равенства. if [ "$OUTPUT" = "$EXPECTED" ]
sh
использует один знак равенства для сравнения строк, а не, как в C, ==
В качестве альтернативы используйте #!/bin/bash
или bash testing.sh
.
POSIX с командой test
([
) требует =
, поэтому лучше для переносимости, но bash не настаивает, он принимает ==
.
Единственный знак равенства исправил это. Я действительно не понимаю, почему, хотя, потому что, когда я посмотрел это и спросил друга, их работа с двойным ==, так что все это только больше смутило меня. Когда я использую двойное равно. Когда я использую single. Или почему это было по-другому, но это было исправлено. Спасибо лжм.
@cdarke: правильно. но OP использует #!/bin/sh
(я исправил ответ, спасибо)
@ user9416023: вы используете sh
, что, вероятно, не является bash. Я добавил дополнительную информацию к ответу (и исправил ошибку). Если это достаточно прояснит ситуацию, отметьте вопрос как решенный.
@LjmDullaart: совершенно верно, я пропустил это.
@LjmDullaart: вы спрашиваете, когда вы должны использовать =
и когда ==
: это зависит от языка, то есть от того, какую оболочку вы используете. Безопаснее использовать =
с командой [
и ключевым словом [[
. bash
(и некоторые другие оболочки) поддерживают (( ))
для арифметики, а для этого требуется ==
.
Это не
c
. Этоbash
.