Eu quero um script que pegue vários números de coluna de um usuário e inverta o conteúdo

3

Eu quero um script Unix que leve vários números de coluna do usuário e inverta o conteúdo.

declare -a param="$@"
# enter 0 when exit the insert element
echo "Enter the numbers"
read n
while [ $n -ne 0 ]
do
    x[$i]='expr $n'
    read n
    let i++
done

#display the all array elements
echo "Array values ${x[@]}"
echo "Array values ${x[*]}"

# To find the array length
length=${#x[*]}
echo $length
    
por user63377 23.03.2014 / 16:39

2 respostas

5

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.

    
por 23.03.2014 / 20:54
2

Se bem entendi, você deseja reverter o conteúdo de uma matriz. Você pode fazer isso com for loop :

for ((idx=${#x[@]}-1; idx >= 0; idx--))
do
  printf '%s ' "${x[idx]}"
done
    
por 23.03.2014 / 16:56