bash: não é possível definir uma variável para uma string sólida [duplicada]

2

Não consigo definir uma variável com uma string de comando inteira da seguinte forma:

A="/bin/ps wwwaux"

for a in $A
do
  echo "$a"
done

Ele atribui array em vez de string sólido em algum lugar. Você poderia ajudar, por favor.

Meu ambiente:

GNU/Linux, GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
    
por user1065145 29.05.2015 / 17:57

2 respostas

8

O loop for espera uma lista:

for a in $A; do
  echo "$a"
done

Expande para:

for a in /bin/ps wwwaux; do
  echo "$a"
done

Que imprime um após o outro. O loop é executado duas vezes, porque há argumentos TWO . A saída será:

/bin/ps
wwwaux

Use aspas em vez disso:

for a in "$A"; do
  echo "$a"
done

Isso se expandirá para:

for a in "/bin/ps wwwaux"; do
  echo "$a"
done

Qual será o loop exatamente uma vez, porque é um argumento ONE . Essa é a saída:

/bin/ps wwwaux
    
por 29.05.2015 / 18:32
5
for f in "$A"
do
  echo $f
done

Sua tarefa já está fazendo o que você quer - é o loop "for" que está quebrando de uma forma que você não quer.

    
por 29.05.2015 / 18:05