Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Неожиданные расширения

Возможны ошибки, которые возникают в сценарии только периодически. Иногда сценарий будет работать нормально, а в других случаях он не удастся из-за результатов расширения. Если мы вернем пропущенную точку с запятой и изменим значение номер к пустой переменной, мы


может продемонстрировать:



#! / Bin / Баш


# проблема: скрипт для демонстрации типичных ошибок


число =


если [$ number = 1]; тогда

echo "Число равно 1." еще

echo "Число не равно 1."

fi

#! / Bin / Баш


# проблема: скрипт для демонстрации типичных ошибок


число =


если [$ number = 1]; тогда

echo "Число равно 1." еще

echo "Число не равно 1."

fi


Запуск сценария с этим изменением приводит к выводу:



[я @ linuxbox ~] $ беда

/ home / me / bin / Trouble: строка 7: [: =: ожидаемый унарный оператор Число не равно 1.

[я @ linuxbox ~] $ беда

/ home / me / bin / Trouble: строка 7: [: =: ожидаемый унарный оператор Число не равно 1.


Мы получаем это довольно загадочное сообщение об ошибке, за которым следует вывод второго эхо команда. Проблема заключается в расширении номер переменная в пределах тестXNUMX команда. Когда команда:



[$ number = 1]

[$ number = 1]


подвергается расширению с номер будучи пустым, результат следующий:


[= 1]

[= 1]


который является недопустимым, и возникает ошибка. В = Оператор является бинарным оператором (для него требуется значение с каждой стороны), но первое значение отсутствует, поэтому тестXNUMX команда ожидает унарный оператор (например, -z) вместо. Далее, поскольку тестXNUMX не удалось (из-за ошибки), if команда получает ненулевой код выхода и действует соответственно, а вторая эхо команда выполняется.

Эту проблему можно исправить, добавив кавычки вокруг первого аргумента в тестXNUMX

команда:


["$ number" = 1]

["$ number" = 1]


Затем, когда произойдет расширение, результат будет следующим:



["" = 1]

["" = 1]


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


Лучшие облачные вычисления для ОС в OnWorks: