Bash: É possível declarar cada item da lista em uma nova linha?

1

Exemplo: você normalmente lista valores em um layout horizontal

for var in 0 1 2 3 4 5 6 7 8 9 do echo $var done

Seria interessante, para fins de controle de versão e legibilidade, inserir cada item da lista em sua própria linha. Isso é possível?

Você não pode fazer o seguinte, com ou sem /r/n :

for var in 0 1 2 3 4 5 6
7 8 9 do echo $var done

Curiosamente, este quase funciona (mesmo com aspas simples ou duplas):

for var in '0 1 2 3 4 5 6 7 8 9' do echo $var done

saída:

-bash: demo.sh: line 11: syntax error near unexpected token ' '0 1 2 3 4 5 6 7 8 9'' -bash: demo.sh: line 11: ' 9''

Isso não funciona, independentemente das cotações simples ou duplas.

for var in "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" do echo $var done

    
por Kevin Suttle 12.04.2016 / 21:59

1 resposta

1

Experimente esta versão testada:

#!/bin/bash --
for var in  \
1 \
2 \
3 \
4 \
6 \
 ; do
  printf "%s\n" "${var}"
done

o loop for divide por padrão uma string contendo (espaços) e \n em elementos separados.

' usado no seu for loop instrui o shell (em sua versão) a considerar o parâmetro como um único valor, uma string contendo várias linhas.

O teste:

$ ./list.sh
1
2
3
4
6

A primeira versão para referência:

#!/bin/bash --
listint='
1
2
3
4
6
'

for var in ${listint} ; do
  printf "%s\n" "${var}"
done

O ' permite definir uma string em várias linhas, incluindo \n .

    
por 12.04.2016 / 22:08