Referência indireta a variáveis
Os avançados avançados modernos têm um método para referenciar o valor de uma variável cujo nome é armazenado em outra variável. Infelizmente, o método difere entre ksh, bash e zsh.
Em mksh ≥R39b, você pode fazer myvar
a nameref:
typeset -n myvar=6
echo "$myvar"
Isso não funciona no ATT ksh93 porque não suporta namerefs para parâmetros posicionais. No caso de você ter uma variável contendo um nome de variável, você pode usar este método.
foo=bar
typeset -n myvar=foo
echo "$myvar" # prints bar
No bash ≥2.0, você pode escrever
echo "${!myvar}"
No zsh, você pode escrever
echo ${(P)myvar}
Em shells antigos, incluindo ksh88 e pdksh, seu único recurso quando você tem uma variável contendo outro nome de variável e deseja usar o valor dessa variável eval
, como explicado por Bruce Ediger . Esta solução funciona em qualquer shell Bourne / POSIX.
eval "value=\${$myvar}"
echo "$value"
Usando uma matriz
Este é o melhor método aqui: é mais simples e mais portátil.
Para seu caso de uso, em qualquer shell com matrizes (todas as variantes de ksh, bash ≥2.0, zsh), você pode atribuir a uma variável de matriz e obter o elemento que deseja. Esteja ciente de que os arrays ksh e bash começam a numeração em 0, mas o zsh começa em 1, a menos que você emita setopt ksh_arrays
ou emulate ksh
.
set -A iostat -- $(iostat)
echo "${iostat[5]}"
Se você deseja copiar os parâmetros posicionais para uma variável de matriz a
:
set -A a -- "$@"
Em ksh93, mksh ≥R39b, bash ≥2.0 e zsh, você pode usar a sintaxe de atribuição de matriz:
iostat=($(iostat))
echo "${iostat[5]}"