
Estou tentando fazer interface com um sistema não gerenciado por mim que está executando alguns scripts de comando Unix e comandos para executar facilmente um trabalho.
Há uma substituição de variável que não funciona e gostaria de saber se posso escrever um comando para evitar a situação. Existem muitas variáveis para definir e quero ter a chance de inserir uma variável vazia. O problema é que o sistema não está passando uma variável vazia e simplesmente não define a variável. eu recebo
${option.VARIABLE}: substituição incorreta
Tento definir algo assim, mas não está funcionando.
se [ -z ${opção.VARIÁVEL} ]; então opção.VARIABLE=""; fi;
Qualquer ideia?
Responder1
Ponto não é um caractere válido em um nome de variável. O manual do bash diz (aqui)
nome
Uma palavra que consiste apenas em letras, números e sublinhados e começa com uma letra ou sublinhado. Os nomes são usados como variáveis de shell e nomes de funções. Também conhecido como identificador.
No entanto, minha página de manual do ksh93 diz:
Definições.
[...] Um identificador é uma sequência de letras, dígitos ou sublinhados começando com uma letra ou sublinhado. Identificadores são usados como componentes de nomes de variáveis. Um vname é uma sequência de um ou mais identificadores separados por uma extensão . e opcionalmente precedido por .. Vnames são usados como nomes de funções e variáveis.
Esta parte parece mais relevante para o seu problema (ênfase minha):
Expansão de parâmetros.
[...] Uma variável é denotada por um vname. Para criar uma variável cujo vname contém um ., uma variável cujo vname consiste em tudo antes do último . já deve existir.
Este recurso existe apenas no ksh93, não no bash. Se o seu script fizer uso dele, você precisará executá-lo em ksh93.
Responder2
Eu acho que o "." no nome da sua variável atrapalha seu código.
Tente remover esse ponto da sua variável, por exemplo, renomeando-o de option.VARIABLE
para optionVARIABLE
.