Eu passei a última hora tentando escrever um roteiro bem simples e nunca me senti tão idiota.
Portanto, tenho uma lista de sequências (que são especificações de seletor de pacotes para um gerenciador de pacotes, se isso for importante) que podem conter asteriscos. Eu preciso construir uma linha de comando preservando esses asteriscos e, em seguida, chamar um programa. Aqui está minha tentativa ingênua:
xs="foo/bar */*"
xs_cmd=""
for x in $xs; do
xs_cmd="$xs_cmd -0 $x "
done
echo $xs_cmd
Eu preciso que a chamada echo
seja equivalente a
echo -0 foo/bar -0 '*/*'
que gera -0 foo/bar -0 */*
.
p. S. Na realidade, a primeira linha é um pouco mais complexa: xs="$some foo/bar */* $(get_others)"
.
Se você executar esse script em um diretório contendo a/b
, receberá -0 foo/bar -0 a/b
.
Quando eu mudo a última linha para
echo "$xs_cmd" # note the quotes
Eu recebo -0 foo/bar -0 a/b
e, em primeiro lugar, isso não é o que eu quero, já que agora estou invocando echo
com um argumento único e, além disso, isso me diz que a expansão está acontecendo anteriormente, provavelmente no for
loop.
Mas não consigo alterar a linha for
porque
for x in "$xs"; do # note the quotes
só fará o loop repetir uma vez: -0 foo/bar */*
(existe um único -0
)
então adicionar essas citações não é uma opção, com certeza.
Agora, se eu voltar ao script original e substituir a primeira linha por
xs="foo/bar '*/*'" # note additional single quotes
Eu recebo -0 foo/bar -0 '*/*'
(as aspas simples não devem estar lá).
Parece que tentei todas as combinações de citações e escapes com aspas invertidas de asteriscos e, literalmente, não faço ideia do que fazer agora.