2016-06-11 2 views
3

Я запускаю пример и пытаюсь выяснить, как были проанализированы аргументы.Как выглядит синтаксис bash в этом примере?

colour1="red" 
colour2="light blue" 
colour3="dark green" 

for X in "$colour1" $colour2" $colour3" 
do 
    echo $X 
done 

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

Выход я получаю

красный

свет

синий темно-зеленый

Выход я ожидал был

красный

свет

синий

темно-зеленый

так ЦВЕТ2 не будут защищены в кавычки, но ЦВЕТ1 и colour3 должно быть. Что делает интерпретатор?

ответ

4

Поскольку $colour2 и "$ colour3" находятся непосредственно рядом, они образуют одно слово перед расширением параметра. Вот как расширение прогрессирует:

  1. Вы начинаете с $colour2" $colour3"
  2. расширение параметров превращает это в light blue" dark green"
  3. софистика применяется к результату разложения на некотируемого пробельных. Поскольку существует только одно некотируемое пространство, два результирующих слова: light и blue" dark green".
  4. Идентификация окончательной цитаты, дающая light и blue dark green.