Por que o $ @ não funciona ao passar strings?

5

Por exemplo, usando este script:

#!/bin/bash
for a in $@
do
   echo $a
done

e em execução: ./script "x y" z retorna:

x
y
z

e não:

x y
z


Por que isso é?
E como eu passaria argumentos de string com espaços para bash?

Eu uso Bash 4.3.33 .

    
por orange orange 23.03.2015 / 17:48

2 respostas

16

Citar $@ :

#!/bin/bash
for a in "$@"
do
  echo "$a"
done

Saída:

x y
z
    
por 23.03.2015 / 17:51
3

Note que ao lidar com $@ você pode simplificá-lo para

for a
do
   echo "$a"
done
If 'in WORDS ...;' is not present, then 'in "$@"' is assumed.
    
por 23.03.2015 / 22:08

Tags