1

Я получаю сообщение об ошибке 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

1 ответ1

2

Вам нужно добавить пробелы вокруг условия while :

while [ "$INPUT_STRING" != "bye" ]

Это может показаться немного странным для людей с опытом программирования, но причины таковы:

  1. while ожидает список команд. Поток управления зависит от состояния выхода этой команды: до тех пор, пока она равна нулю, тело продолжает выполняться.

  2. [ expression ] является альтернативной формой test expression . Здесь test - это команда, которая оценивает выражение и возвращает его значение в форме состояния выхода команды. Он обязательно возвращает нулевое состояние завершения, если выражение (логически) оценивается как true логическое значение, так что его можно использовать в командах if и while .

  3. На самом деле, и test и [ являются исполняемыми файлами в linux (обычно они находятся в /usr/bin). Однако некоторые оболочки, такие как bash , используют внутренние команды с одинаковыми именами.

  4. Поскольку test и [ являются (технически) простыми командами, их аргументы должны быть отделены от имени команды и между собой одним или несколькими белыми символами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .