Proteção de argumentos contra expansão


Vários caracteres têm um significado especial no Shell Bash. Para impedir expansões de shell em partes de sua linha de comando, você pode usar aspas e escapes em caracteres e strings.

A barra invertida (\) é um caractere de escape no shell Bash. Ela protege o caractere seguinte contra expansão.

[user@host glob]$ echo The value of $HOME is your home directory.
The value of /home/user is your home directory.
[user@host glob]$ echo The value of \$HOME is your home directory.
The value of $HOME is your home directory.

No exemplo anterior, com o símbolo de dólar protegido contra expansão, o Bash o trata como um caractere regular, sem expansão de variável em $HOME.

Para proteger strings mais longas, você pode usar aspas simples () ou **duplas** () para delimitar strings. Elas têm efeitos ligeiramente diferentes. As aspas simples param toda a expansão do shell. As aspas duplas param a maior parte da expansão do shell.

As aspas duplas suprimem globbing e a expansão do shell, mas ainda permitir substituição de comandos e de variáveis.

[user@host glob]$ myhost=$(hostname -s); echo $myhost
host
[user@host glob]$ echo "***** hostname is ${myhost} *****"
***** hostname is host *****

Use aspas simples para interpretar todo o texto literalmente.

[user@host glob]$ echo "Will variable $myhost evaluate to $(hostname -s)?"
Will variable host evaluate to host?
[user@host glob]$ echo 'Will variable $myhost evaluate to $(hostname -s)?'
Will variable $myhost evaluate to $(hostname -s)?

Observação

É fácil confundir as aspas simples (') e o acento grave de substituição de comandos, tanto na tela quanto no teclado. Usar um no lugar do outro levará a um comportamento inesperado do Shell.

Referências