Почему я не могу использовать шаблоны подстановки в переменных назначениях?
В bash это работает:
var1=abc
Но это дает ошибку:
var*1=abc
var*1=abc: command not found
Почему так? Почему выражение рассматривается как команда?
3 ответа
С http://www.gnu.org/software/bash/manual/bashref.html
название
Слово, состоящее только из букв, цифр и символов подчеркивания и начинающееся с буквы или символа подчеркивания. Имена используются как имена переменных и функций оболочки. Также называется идентификатором.
Значение с левой стороны не является идентификатором. Это выражение. Поэтому эта команда (для оценки всего выражения) является недействительной.
Другими словами, у вас не может быть звездочек в именах, и вы не можете сгенерировать имя переменной, выполнив некоторую математику (умножение).
POSIX определяет имена переменных оболочки, которые состоят из буквенно-цифровых символов и подчеркивания, а не начинаются с цифры. (Существуют специальные переменные, которые нарушают это; они всегда являются одиночными символами и не могут конфликтовать с пользовательскими переменными.)
3.230 Имя
В языке команд оболочки слово, состоящее исключительно из символов подчеркивания, цифр и алфавита из переносимого набора символов. Первый символ имени не является цифрой.