Exemplo:
$ eval echo "{x,y,z}\ --opt\; "
x --opt; y --opt; z --opt;
Suponha que a 2ª lista seja {1,2,3}
e seu comprimento seja igual ao comprimento da 1ª (inicial) lista.
Perguntas:
- Como fazer
bash
produtos:
x --opt 1; y --opt 2; z --opt 3;
- Como fazer
bash
produtos (ou seja, para referir os elementos da{x,y,z}
lista):
x --opt x; y --opt y; z --opt z;
One-liners são os preferidos.
A expansão de chaves criaria todos os pares possíveis, não percorre as duas listas em paralelo:
Para produzir a saída desejada, você precisa usar outra coisa. Por exemplo, faça um loop sobre os índices de uma matriz:
Ou use arrays associativos:
Como a choroba apontou , o uso
{x..z}' --opt '{1..3}';'
geraria todas as combinações possíveis de cordas.Da lista de todas as combinações possíveis, de 1 a 9, queremos cada quarta combinação, 1, 5 e 9.
Ou, usando arrays, buscando os elementos 0, 4 e 8.
Observe que eu nunca escreveria código real como este e que o código acima gera strings que são praticamente inúteis para uso como comandos/argumentos reais, pois precisariam ser explicitamente divididos pelo shell.
O código é apresentado puramente como um boato interessante.