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.