Para loops em zsh e bash

49

Tenho notado que existem duas formas alternativas de criar loops no zsh :

  1. for x (1 2 3); do echo $x; done
  2. for x in 1 2 3; do echo $x; done

Ambos imprimem:

1
2
3

Minha pergunta é: por que as duas sintaxes? A $x é iterada por meio de um tipo de objeto diferente em cada um deles?

O bash faz uma distinção semelhante?

Adendo:

Por que o seguinte funciona?:

#!/bin/zsh
a=1
b=2
c=5    

d=(a b c)    
for x in $d; do print $x;done

mas este não é?:

#!/bin/zsh
a=1
b=2
c=5

d=(a b c)    
# It complains with "parse error near '$d'"
for x $d; do print $x;done 
    
por Amelio Vazquez-Reina 25.10.2011 / 00:46

1 resposta

47

Várias formas de comandos complexos, como loops, têm formulários alternativos em zsh. Esses formulários são inspirados principalmente pelo shell C , que era bastante comum quando o zsh era jovem, mas agora desaparecia. Essas formas alternativas agem exatamente como as formas normais, são apenas uma sintaxe diferente. Eles são ligeiramente mais curtos, mas menos claros.

O formulário padrão para o comando for é for x in 1 2 3; do echo $x; done e o formulário padrão para o comando while é while test …; do somecommand; done . Ksh, bash e zsh têm uma forma alternativa de for : for ((i = 0; i < 42; i++)); do somecommand; done , que imita os for loops de linguagens como Pascal ou C, para enumerar inteiros. Outros formulários exóticos que existem no zsh são específicos do zsh (mas geralmente são inspirados pelo csh).

    
por 25.10.2011 / 01:04

Tags