Когда я хочу определить TEST в Терминале, например: TEST = Здравствуйте, отображается: TEST: Команда не найдена. Почему работает только как TEST = Hello. Я спрашиваю, потому что все определения в моем make-файле такие же, и я не хочу его менять.
В bash назначение переменной имеет синтаксис: имя = [значение]
. Вы не можете помещать пробелы без кавычек вокруг =
, потому что bash не интерпретирует это как назначенное вами назначение. bash обрабатывает большинство списков слов как команду с параметрами, например abc = def # вызвать команду или функцию 'abc' с '= def' в качестве аргумента
source
Make-файлы читаются и обрабатываются программой make
, тогда как сценарии оболочки читаются и обрабатываются интерпретатором оболочки - они имеют другой синтаксис назначения переменных и правила анализа.
] Здесь нечего сказать, оболочка не может анализировать назначения с пробелами вокруг =
, как это делает make
- фактически, некоторые оболочки (особенно csh
), например
#!/bin/csh
set test = hello
echo "$test"
, однако POSIX / bin / sh
и производные от Борна bash
, а также ksh
и ] zsh
не допускают.