Como você evita argumentos de shell para um subcomando?

0

Digamos que você esteja escrevendo um script de shell. Ele recebe um número arbitrário de argumentos de linha de comando e os transmite para um utilitário de linha de comando. Ao chamar esse utilitário, cada argumento precisa ser prefixado com um sinalizador. Qual é a maneira correta de escapar disso em seu script, para que o utilitário veja exatamente as mesmas sequências que o script de shell faz?

Exemplo concreto: passando expressões regulares para grep . Você executa seu script de wrapper:

./findit.sh needle "old socks" "spare change"

E você espera que grep seja chamado com esses argumentos como expressões de correspondência:

grep haystack.txt -e needle -e "old socks" -e "spare change"

É o prefixo -e que complica as coisas; se não fosse necessário, você poderia usar apenas "$@" . O que o script precisa fazer para garantir que grep receba os argumentos corretamente? Existe uma maneira portátil de fazer isso?

    
por Xavier Holt 24.07.2017 / 01:19

1 resposta

0

Eu tenho uma versão de trabalho no Bash, mas ela usa matrizes Bash, e eu suspeito que não seja portável:

for arg in "$@"; do
  args+=("-e" "$arg")
done

grep haystack.txt "${args[@]}"
    
por 24.07.2017 / 01:19