$ echo --hidden-import={a,b}
--hidden-import=a --hidden-import=b
em comparação com
echo --hidden-import={$FILES}
--hidden-import={cpu_mon disk_mon mem_mon network_mon}
Onde FILES
foi criado por
export FILES=$(ls)
No exemplo eu esperava obter
--hidden-import=cpu_mon --hidden-import==disk_mon --hidden-import==mem_mon --hidden-import==network_mon
A expansão da chave acontece antes da expansão variável. Se você tiver
{$x,$y}
o shell primeiro o processa em dois argumentos$x
e$y
, e só então expande as variáveis dentro de cada argumento separadamente. E se você tiver apenas um item, a expansão do brace não acontece;{xy}
sempre permanece justo{xy}
.Se você estiver escrevendo para Bash, use matrizes e expansão de parâmetros:
Aqui o
#
in${var/#match/replacement}
faz com que substitua a string correspondente (comprimento zero) apenas no início da variável. Observe também o uso defiles[@]
para obter todos os elementos do array em vez de apenas o primeiro.Se isso não funcionar, apenas construa a lista de argumentos usando um loop:
Alternativamente, o printf do Bash pode ser usado para adicionar prefixos/sufixos a vários argumentos de uma só vez:
Na pior das hipóteses (se você não tem Bash e descartou todas as linguagens alternativas de script CLI, como Perl ou Python ou mesmo PHP), tente sed:
(Barra invertida deliberada para ignorar aliases como 'ls -F'.)