
Я пытаюсь взаимодействовать с системой, которой я не управляю, и которая выполняет некоторые командные скрипты Unix и команды для легкого выполнения задания.
Есть подстановка переменной, которая не работает, и мне интересно, могу ли я написать команду, чтобы избежать этой ситуации. Нужно установить много переменных, и я хочу иметь возможность ввести пустую переменную. Проблема в том, что система не передает пустую переменную и просто не устанавливает переменную. Я получаю
${option.VARIABLE}: плохая замена
Я пытаюсь установить что-то подобное, но ничего не получается.
если [ -z ${option.VARIABLE} ]; тогда option.VARIABLE=""; fi;
Есть идеи?
решение1
Точка не является допустимым символом в имени переменной. В руководстве по bash говорится (здесь)
имя
Слово, состоящее исключительно из букв, цифр и подчеркиваний и начинающееся с буквы или подчеркивания. Имена используются как имена переменных оболочки и функций. Также называется идентификатором.
Однако на моей странице руководства ksh93 написано:
Определения.
[...] Идентификатор — это последовательность букв, цифр или символов подчеркивания, начинающаяся с буквы или символа подчеркивания. Идентификаторы используются как компоненты имен переменных. Vname — это последовательность одного или нескольких идентификаторов, разделенных точкой . и, возможно, предваряемых точкой .. Vname используются как имена функций и переменных.
Эта часть кажется наиболее актуальной для вашего вопроса (выделено мной):
Расширение параметров.
[...] Переменная обозначается vname. Чтобы создать переменную, vname которой содержит ., переменная, vname которой состоит из всего, что находится до последней ., уже должна существовать.
Эта функция существует только в ksh93, в bash ее нет. Если ваш скрипт ее использует, вам нужно запустить его под ksh93.
решение2
Я думаю, что «.» в имени переменной портит ваш код.
Попробуйте удалить эту точку в вашей переменной, например, переименовав ее из option.VARIABLE
в optionVARIABLE
.