Como escapar de uma variável inteira?

2

Na resposta desta pergunta:

link

Ele disse que temos que colocar um argumento de função em Doublequotes para escapar do argumento inteiro (como em "[abc]_[x|y]" ).

Mas e se o caractere especial for " no início ( "[abc]_[x|y]" ), não podemos fazer o seguinte:

program  ""[abc]_[x|y]"  anotheragument

Como posso escapar do " neste caso?

    
por Networker 22.08.2014 / 23:51

2 respostas

1

Se eu entendi corretamente, você tem um padrão de expressão regular em uma variável e gostaria que grep a usasse sem dar nenhum significado especial aos metacaracteres de expressão regular. Se esse for o caso, a opção -F (sequências fixas) para grep é o que você deseja:

grep -F "$var" your_file

Seu sistema também pode ter um comando especial ( fgrep ) que é equivalente ao acima:

fgrep "$var" your_file
    
por 24.08.2014 / 03:54
0

Aspas simples devem conseguir o que você deseja.

# " is the special charater
var='"hello "word";'
grep "$var" file

Na página do bash man:

Enclosing characters in single quotes preserves the literal value of each character within the quotes.  A  single  quote  may  not
   occur between single quotes, even when preceded by a backslash.

Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $, ‘,
   \, and, when history expansion is enabled, !.  The characters $ and ‘ retain their special  meaning  within  double  quotes.   The
   backslash  retains  its special meaning only when followed by one of the following characters: $, ‘, ", \, or <newline>.  A double
   quote may be quoted within double quotes by preceding it with a backslash.  If enabled, history expansion will be performed unless
   an !  appearing in double quotes is escaped using a backslash.  The backslash preceding the !  is not removed.
    
por 23.08.2014 / 00:02