Intereting Posts
Будет ли wget -k по-прежнему преобразовывать ссылки в относительные пути, если wget остановлен преждевременно? Драйвер Broadcom на Kali Linux Ускорьте скорость воспроизведения онлайн-видео в веб-браузере на Debian Linux Найти процесс, который останавливает apache ssh не работает в CentOS 6.4? obfsproxy не удается построить, потому что он не может найти event2 / util.h Ввод файла для оператора select в командной строке Regex to match =, за которым следует новая строка, чтобы оба они были удалены Скрипт Simple Shell для регистрации дискового пространства команда login не запрашивает имя пользователя / пароль Сценарий запуска systemd после того, как GUI готов? Как разрешить доступ только к одной папке NTFS уже смонтированного раздела для конкретного пользователя? Как я могу запустить часть скрипта в качестве другого пользователя? Очистка ошибок для сценариев оболочки Как я могу получить доступ к своей учетной записи и файлам со всех компьютеров

Размещение переменных скрипта Bash

Я начал изучать скрипты Bash, и я использую учебник скриптов Bash

Там это говорит

Прежде чем Bash интерпретирует (или запускает) каждую строку нашего скрипта, он сначала проверяет, присутствуют ли какие-либо имена переменных . Для каждой идентифицированной переменной она заменяет имя переменной на ее значение. Затем он запускает эту строку кода и снова начинает процесс на следующей строке.

Итак, сначала Bash проходит весь сценарий, чтобы найти переменные? Я не уверен, пытался ли это сказать автор, но если да, думаю, это не правильно?

когда я выполню:

#!/bin/bash echo "hello $USERR" USERR=John 

Я получаю hello как результат.

Если я бегу:

 #!/bin/bash USERR=John echo "hello $USERR" 

тогда я получаю hello John как результат.

Итак, сначала Bash проходит весь сценарий, чтобы найти переменные?

Нету. Как вы сами обнаружили в своем примере, скрипты Bash выполняются сверху вниз.

Хорошей практикой является определение всех необходимых вам переменных в верхней части вашего скрипта.

Это очень неаккуратный способ сказать, что shell сканирует каждую команду на предмет расширений, таких как, например, переменные (но также подстановки команд и т. Д.)

Текст можно интерпретировать так, чтобы подразумевать, что shell читает весь сценарий и ищет переменные в каждой строке перед выполнением. Это не так. Он обрабатывает команду сценария командой, а не построчно. Команда может занимать несколько строк. Команда не обрабатывается до тех пор, пока интерпретатор оболочки не доберется до нее при выполнении сценария.

Оболочка bash выполняет перед каждой командой следующее:

  1. расширение скобки
  2. расширение тильды
  3. расширение параметров и переменных
  4. арифметическое расширение
  5. подстановка команд (выполняется слева направо)
  6. разделение слов
  7. расширение пути
  8. удаление цитаты