Você está entendendo mal como a expansão de chaves funciona. Por favor, leia novamente o comentário de Dennis Williamson acima.
Você está pensando que quando eu escrevo mv foo.{1,2,3} bar
, o shell está invocando o comando várias vezes, como se você tivesse digitado:
mv foo.1 bar
mv foo.2 bar
mv foo.3 bar
Se isso fosse verdade, sua pergunta faria sentido: o shell está executando vários comandos e, portanto, precisa manter uma lista.
Mas não é isso que está acontecendo. A expansão de chave expande um único argumento e, em seguida, invoca a linha de comandos uma vez . Portanto, para o exemplo acima, o shell vê que o argumento foo.{1,2,3}
contém expansão de chave e expande esse argumento em três argumentos foo.1 foo.2 foo.3
. Em seguida, ele insere essa expansão na linha de comando no lugar do argumento braced e, em seguida, continua analisando a linha de comando. Quando terminar, o shell executa um comando, que ficaria assim:
mv foo.1 foo.2 foo.3 bar
Então, sim, provavelmente, quando o shell estiver expandindo esse argumento, ele manterá uma lista, mas não há como acessar essa lista na expansão de outros argumentos porque a expansão de chave está totalmente concluída e todas as informações sobre a expansão estão esgotadas. e esquecido no momento em que os outros argumentos estão sendo analisados.
A única maneira de tal argumento ser útil, de qualquer forma, seria se o shell estivesse executando vários comandos, o que não é. Para executar vários comandos, você precisa usar um loop real; A expansão do aparelho não faz isso.
Quanto a $_
, essa é uma construção de Perl que pode ser usada no lugar de uma variável de loop (como x
em seu exemplo de loop), portanto, não é realmente relevante fortalecer a expansão.