Я получаю сообщение об ошибке 2: [: missing ]
при использовании следующего while
цикла:
#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
echo "please type something (bye quits) "
read INPUT_STRING
echo "you tuped : $INPUT_STRING "
done
Я получаю сообщение об ошибке 2: [: missing ]
при использовании следующего while
цикла:
#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
echo "please type something (bye quits) "
read INPUT_STRING
echo "you tuped : $INPUT_STRING "
done
Вам нужно добавить пробелы вокруг условия while
:
while [ "$INPUT_STRING" != "bye" ]
Это может показаться немного странным для людей с опытом программирования, но причины таковы:
while
ожидает список команд. Поток управления зависит от состояния выхода этой команды: до тех пор, пока она равна нулю, тело продолжает выполняться.
[ expression ]
является альтернативной формой test expression
. Здесь test
- это команда, которая оценивает выражение и возвращает его значение в форме состояния выхода команды. Он обязательно возвращает нулевое состояние завершения, если выражение (логически) оценивается как true
логическое значение, так что его можно использовать в командах if
и while
.
На самом деле, и test
и [
являются исполняемыми файлами в linux (обычно они находятся в /usr/bin
). Однако некоторые оболочки, такие как bash
, используют внутренние команды с одинаковыми именами.
Поскольку test
и [
являются (технически) простыми командами, их аргументы должны быть отделены от имени команды и между собой одним или несколькими белыми символами.