Expansão de suporte e comando composto

2

Eu não entendo porque esses dois loops são diferentes. Deve ter algo a ver com quando a expansão da chave é executada e como o espaço em branco é interpretado

for i in b{e,\ }s ; do echo $i ; done

for i in bes b s ; do echo $i ; done

e considere isso também

for i in $(echo b{e,\ }s) ; do echo $i ; done
    
por Richard Quint 12.09.2015 / 21:04

1 resposta

2

Quando você executa for i in b{e,\ }s ; do echo $i ; done , a expansão de chave b{e,\ }s é expandida em dois argumentos, um é bes e outro é b s , portanto, o loop for tem dois valores para iterar. Observe que aqui b s é um único argumento.

Por outro lado, em for i in bes b s ; do echo $i ; done , você está mencionando explicitamente três argumentos para iterar (separados por espaços), ou seja, bes , b e s .

No terceiro caso, a substituição de comando $(echo b{e,\ }s) gerará três argumentos bes , b e s , então, novamente, o loop for tem três valores para iterar exatamente como no segundo caso.

    
por 12.09.2015 / 21:12