Eu estava lendo sobre o echo
comando no UNIX e encontrei a -e
opção que é usada para habilitar a interpretação de escapes de barra invertida, o problema é que uma dessas sequências de escape de barra invertida era o \\, mas quando usei os dois comandos:
echo "hello\\\world"
e
echo -e "hello\\\world"
recebo a mesma saída: hello\\world , então qual é a diferença? |
Responder1
O padrão é expandir as sequências de escape, a opção -e não é padrão.
Se sua implementação de eco não incluir -e na saída de eco, ela não será compatível.
O problema aqui é que existem implementações que seguem apenas os requisitos mínimos do POSIX e ignoram o fato de que uma plataforma que pode ser chamada de UNIX
compatível precisa implementar suporte para XSI
melhorias do POSIX.
BTW: bash no MacOS X e Solaris é compilado para sempre expandir as sequências de escape. Bash na variante de compilação padrão não é compatível com POSIX XSI.
Shells compatíveis com POSIX, como ksh93, bosh ou dash, expandem as sequências de escape por padrão, conforme necessário.
Se você gosta de verificar o comportamento, sua string de teste não é uma boa ideia. Um teste melhor seria:
echo '\tfoo'
e para verificar se foo
é precedido por um caractere de tabulação na saída.
A razão pela qual você pode ter tido problemas é que você usou foo\\bar
e que o shell já trata barras invertidas em strings entre aspas duplas. Se você quiser verificar o echo
comportamento, precisará usar strings entre aspas simples como argumentos.