eval "$ARRAY_NAME"'+=("$VARIABLE_VALUE")'
(também funcionaria em zsh
ou ksh93
).
Seu ksh88
um deve ser:
eval 'set -A '"$ARRAY_NAME"' "${'"$ARRAY_NAME"'[@]}" "${VARIABLE_VALUE}"'
Eu não tenho certeza se isso foi respondido, eu olhei e não encontrei nada parecido com o que estou tentando fazer.
Eu tenho um número de scripts de shell que são capazes de rodar em um shell ksh ou bash, e eles fazem uso de arrays. Eu criei uma função chamada "setArray" que interroga o shell em execução e determina o que será usado para criar o array - para ksh, defina -A, para bash, typeset -a. No entanto, estou tendo alguns problemas com a parte bash.
A função recebe dois argumentos, o nome da matriz e o valor a ser adicionado. Isso se torna $ {ARRAY_NAME} e $ {VARIABLE_VALUE}. Fazendo o seguinte:
set -A $(eval echo \${ARRAY_NAME}) $(eval echo \${${ARRAY_NAME}[*]}) "${VARIABLE_VALUE}"
funciona perfeitamente no ksh. No entanto,
typeset -a $(eval echo \${ARRAY_NAME})=( $(eval echo \${${ARRAY_NAME}[*]}) "${VARIABLE_VALUE}" )
não. Isso fornece
bash: syntax error near unexpected token '('
Eu sei que posso apenas fazer uma lista de strings (por exemplo, MYARRAY="um dois três") e apenas percorrê-lo usando o IFS, mas também não quero perder a capacidade de usar um array. / p>
Alguma opinião?
eval "$ARRAY_NAME"'+=("$VARIABLE_VALUE")'
(também funcionaria em zsh
ou ksh93
).
Seu ksh88
um deve ser:
eval 'set -A '"$ARRAY_NAME"' "${'"$ARRAY_NAME"'[@]}" "${VARIABLE_VALUE}"'
Acho que o seguinte funciona no bash:
eval typeset -a $(eval echo \${ARRAY_NAME})=\( $(eval echo \${${ARRAY_NAME}[*]}) "${VARIABLE_VALUE}" \)
As alterações que fiz são (1) prefixando eval
e (2) escapando os parênteses que delimitam o array que construímos.
No entanto, o mesmo comando executado em ksh após a substituição de typeset -a
por set -A
falhará. Seria possível para você:
Livre-se de typeset
/ set
inteiramente (acho que atribuir uma matriz à sua variável define implicitamente seu tipo) ou
altere seu código para que os dois bits do código específico do shell sejam totalmente separados?
Em ambos os casos, o snippet postado aqui parece frágil; talvez seja melhor usar apenas o operador de acréscimo +=
, que parece estar disponível no bash e no ksh.
Tags bash shell-script array typeset