Passando um argumento variável para egrep em um script bash

1

Eu tenho um script, myScript, que está tentando egrep o argumento do script em um arquivo. De alguma forma, a expansão de variáveis não está funcionando corretamente com o comando egrep. Acredito que isolei o problema no exemplo da seguinte forma: se eu escrever o argumento explicitamente no script, o comando egrep funciona, mas se eu passar o argumento para o script, o comando egrep não gosta do argumento I envie-o.

#!/bin/bash
echo "\def\$1" > myFile
echo "\def\$1$1" >> myFile

myVar=\$1
echo myVar is "$myVar"

grepWorks=$(egrep '\def\dog\>' myFile)
echo Without a variable, grep output is $grepWorks

echo Pattern string fed to grep with variable myVar is  "\def$myVar"
grepFails=$(egrep "\def$myVar\>" myFile)
echo With a variable, grep output is $grepFails

Quando executo este script com

myScript dog

a saída é:

myVar is \dog
Without a variable, grep output is \def\dog
Pattern string fed to grep with variable myVar is \def\dog
With a variable, grep output is

Qualquer ajuda seria muito apreciada.

    
por Leo Simon 20.11.2015 / 18:49

1 resposta

3

Altere a seguinte linha:

grepFails=$(egrep "\def$myVar\>" myFile)

Com:

grepFails=$(egrep "\\def\$myVar\>" myFile)

O problema é que você não estava escapando do \ corretamente no subshell.

Para entender, tente executar eval echo "\\" . Você notará que a saída é \ devido à avaliação dupla.

    
por 20.11.2015 / 19:01