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