Um copiar e colar da minha resposta para uma pergunta extremamente semelhante sobre o estouro de pilha, que foi postada junto com uma resposta extremamente similar à do Gnouc acima ...
_arr+=( '"${_arrev} is an actual "${array[@]}"' )
_arr+=( '"${_arrev} is created as a result"' )
_arr+=( '"of reversing the key order in"' )
_arr+=( '"this "${_arr}. It handles zsh and"' )
_arr+=( '"bash arrays intelligently by tracking"' )
_arr+=( '"shell "$ENV." quotes=fine ( i hope ) "' )
. <<REVERSE /dev/stdin ⏎
_arrev=( $(: $((l=${#_arr[@]}${ZSH_VERSION++1})) ; printf '"${_arr[$(('$l'-%d))]}" ' 'seq 1 $l') )
REVERSE
echo ; printf %s\n ${_arrev}
"shell "$ENV." quotes=fine ( i hope ) "
"bash arrays intelligently by tracking"
"this "${_arr}. It handles zsh and"
"of reversing the key order in"
"${_arrev} is created as a result"
"${_arrev} is an actual "${array[@]}"
Isso deve lidar com qualquer array possível, eu acho.
Se você estiver interessado no que está acontecendo, sugiro que dê uma olhada aqui primeiro. Então, talvez aqui , definitivamente aqui e, se você tiver tempo, aqui e aqui .
Em todas essas respostas eu discuto diferentes
aspectos do documento aqui (e em muitos outros) que você pode usar para sua vantagem. Por exemplo, discuto variáveis que avaliam duas vezes, o que é feito acima, e em uma declaro uma função que declara globalmente outra função chamada "_$1"
em apenas 5 ou 6 linhas - a maioria delas _$1() { func body ; }
. É muito útil se você usá-lo corretamente.
Em relação à troca automática entre bash
/ zsh,
, isso é outra coisa, mas é muito simples também. Consulte aqui .
Então, basicamente, se você pode criar um array bash
/ zsh,
, você deve conseguir invertê-lo usando apenas os 3. < < ... linhas REVERSAS. Ele não precisa fazer um loop no array da mesma forma que for loop
faz.