Сравните целое число в ударе, ожидаемый унарный оператор

135
задан jww 5 February 2019 в 03:58
поделиться

3 ответа

Ваша часть сценария просто работает отлично. Вы уверены, что не присваиваете ничто больше перед если к "i"?

частая ошибка А не состоит в том, чтобы также оставить пространство после и перед квадратными скобками.

2
ответ дан 23 November 2019 в 23:44
поделиться

Оценка из сообщения об ошибке значение я был пустой строкой, когда Вы выполнили его, не 0.

6
ответ дан 23 November 2019 в 23:44
поделиться

Ваша проблема является результатом того, которое $i имеет пустое значение, когда Ваш оператор перестал работать. Всегда кавычка Ваши переменные при выполнении сравнений, если существует малейший шанс, что один из них может быть пустым, например:

if [ "$i" -ge 2 ] ; then
  ...
fi

Это из-за того, как оболочка рассматривает переменные. Примите исходный пример,

if [ $i -ge 2 ] ; then ...

первая вещь, которую оболочка делает при выполнении, что конкретная строка кода является заменой значение $i, точно так же, как любимый редактор поиск & замена функция была бы. Поэтому предположите, что $i пусто или, еще более иллюстративен, предположите, что $i набор пробелов! Оболочка заменит $i следующим образом:

if [     -ge 2 ] ; then ...

Теперь, когда подстановки переменных сделаны, доходы оболочки со сравнением и.... перестали работать, потому что оно не видит, что-либо понятное уехало из [1 111]. Однако заключение в кавычки $i:

if [ "$i" -ge 2 ] ; then ...

становится:

if [ "    " -ge 2 ] ; then ...

оболочка теперь видит двойные кавычки и знает, что Вы на самом деле сравниваете четыре пробела с 2 и пропустите if.

у Вас также есть опция определения значения по умолчанию для [1 114], если $i пробел, следующим образом:

if [ "${i:-0}" -ge 2 ] ; then ...

Это займет место, значение 0 вместо [1 116] $i, не определено. Я все еще поддерживаю кавычки, потому что, снова, если $i набор пробелов тогда, он не рассчитывает как [1 122] неопределенный , он не будет заменен 0, и Вы столкнетесь с проблемой еще раз.

читайте это , когда у Вас будет время. Оболочку рассматривают как черный квадрат многие, но она работает с очень немногими и очень простыми правилами - как только Вы знаете о том, что те правила (один из них являющийся, как работа переменных в оболочке, как объяснено выше), оболочка больше не будет иметь секретов для Вас.

293
ответ дан 23 November 2019 в 23:44
поделиться