definir opções variáveis com ponto

1

Estou tentando fazer interface com um sistema não gerenciado por mim que está executando alguns scripts de comando do Unix e comando para executar facilmente um trabalho.

Existe 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 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}: bad substitution

Eu tento definir algo assim, mas não está funcionando.

if [ -z ${option.VARIABLE} ]; then option.VARIABLE=""; fi;

Alguma ideia?

    
por Vargan 24.06.2014 / 17:13

2 respostas

4

Dot não é um caractere válido em um nome de variável. O manual do bash diz ( aqui )

name

A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.

No entanto, minha página man do ksh93 diz:

Definitions.

[...] An identifier is a sequence of letters, digits, or underscores start‐ ing with a letter or underscore. Identifiers are used as components of variable names. A vname is a sequence of one or more identifiers separated by a . and optionally preceded by a .. Vnames are used as function and variable names.

Esta parte parece mais relevante para o seu problema (ênfase minha):

Parameter Expansion.

[...] A variable is denoted by a vname. To create a variable whose vname contains a ., a variable whose vname consists of everything before the last . must already exist.

Esse recurso existe apenas no ksh93, não no bash. Se o seu script faz uso dele, você precisa executá-lo em ksh93.

    
por 24.06.2014 / 18:54
2

Eu acho que o "." no nome da sua variável atrapalha o seu código.

Tente remover esse ponto na sua variável, por exemplo, renomeando-o de option.VARIABLE para optionVARIABLE .

    
por 24.06.2014 / 17:19