Exemplos de formas alternativas de Zsh de comandos complexos

2

Por favor, forneça uma visão sobre esta parte da documentação do zsh. Passei muito tempo neste documento, mas poderia bot deixar claro: link

Estou procurando exemplos claros para todos os comandos if for foreach while until repeat case select function .

    
por Tuyen Pham 12.09.2018 / 18:18

1 resposta

6

Essas são apenas formas mais curtas de alguns comandos, principalmente se livrando de palavras reservadas "redundantes" como then , fi , do , done , etc. Os formatos longos são mais portáteis; os curtos trabalham exclusivamente em zsh .

Por exemplo, forma longa de if

if [[ -f file ]] ; then echo "file exists"; else echo "file does not exist"; fi

funcionará não apenas em zsh mas também em outros shells (substitua os colchetes duplos por únicos para obter ainda mais portabilidade)

Considerando formatos curtos

if [[ -f file ]] { echo "file exists" } else { echo "file does not exist" }
if [[ -f file ]] echo file exists

funciona apenas em zsh .

Outro exemplo, desta vez com for loop.

Formatos longos:

for char in a b c; do echo $char; done
for (( x=0; x<3; x++ )) do echo $x; done

Curto:

for char in a b c; echo $char
for char (a b c) echo $char             # second version of the same
foreach char (a b c); echo $char; end   # csh-like 'for' loop
for (( x=0; x<3; x++ )) echo $x         # c++ version
for (( x=0; x<3; x++ )) { echo "$x"; }  # also works in bash and ksh

Acredito que você entendeu a ideia - apenas removemos palavras desnecessárias e, se as listas precisarem ser separadas das outras, envolva-as com {} . O resto dos comandos:

  • enquanto

    x=0; while ((x<3)); do echo $((x++)); done    # long
    x=0; while ((x<3)) { echo $((x++)) }          # short
    x=0; while ((x<3)) echo $((x++))              # shorter for single command
    
  • até

    x=0; until ((x>3)); do echo $((x++)); done    # long
    x=0; until ((x>3)) { echo $((x++)) }          # short
    x=0; until ((x>3)) echo $((x++))              # shorter for single command
    
  • repita

    repeat 3; do echo abc; done                   # long
    repeat 3 echo abc                             # short
    
  • caso

    word=xyz; case $word in abc) echo v1;; xyz) echo v2;; esac   # long
    word=xyz; case $word { abc) echo v1;; xyz) echo v2 }         # short
    
  • selecione

    select var in a b c; do echo $var; done       # long
    select var in a b c; echo $var                # short
    select var (a b c) echo $var                  # shorter
    
  • função

    function myfun1 { echo abc; }            # long
    function myfun2; echo abc                # short
    myfun3() echo abc                        # shorter and Bourne-compatible
    
por 12.09.2018 / 19:14

Tags