Почему TEST = Hello с пробелами не работает в терминале?

Когда я хочу определить TEST в Терминале, например: TEST = Здравствуйте, отображается: TEST: Команда не найдена. Почему работает только как TEST = Hello. Я спрашиваю, потому что все определения в моем make-файле такие же, и я не хочу его менять.

0
задан 15 November 2020 в 09:44

2 ответа

В bash назначение переменной имеет синтаксис: имя = [значение] . Вы не можете помещать пробелы без кавычек вокруг = , потому что bash не интерпретирует это как назначенное вами назначение. bash обрабатывает большинство списков слов как команду с параметрами, например abc = def # вызвать команду или функцию 'abc' с '= def' в качестве аргумента source

2
ответ дан 3 January 2021 в 22:49

Make-файлы читаются и обрабатываются программой make , тогда как сценарии оболочки читаются и обрабатываются интерпретатором оболочки - они имеют другой синтаксис назначения переменных и правила анализа.

] Здесь нечего сказать, оболочка не может анализировать назначения с пробелами вокруг = , как это делает make - фактически, некоторые оболочки (особенно csh ), например

#!/bin/csh

set test = hello
echo "$test"

, однако POSIX / bin / sh и производные от Борна bash , а также ksh и ] zsh не допускают.

4
ответ дан 3 January 2021 в 22:49

Другие вопросы по тегам:

Похожие вопросы: