Depende da sua versão de bash
:
bash-4.2$ echo 'echo \'echo "uh!"\''
bash: !"\'': event not found
bash-4.3$ echo 'echo \'echo "uh!"\''
uh!
Em bash-4.3
, !"
não é mais elegível como designador de evento histórico, portanto, a expansão do histórico não se aplica.
Além disso, é apenas uma sintaxe de aninhamento backtick normal. Dentro dos backticks, o caractere de barra invertida é sobrecarregado (mais uma vez) para fazer essa expansão aninhada novamente.
Você pode aninhar quantos níveis desejar:
echo 'echo \'echo \\'echo \\\\'echo whatever\\\\'\\'\''
Qual é o equivalente pesado de:
echo $(echo $(echo $(echo $(echo whatever))))
No entanto, note que em ambas as versões, a substituição de comandos está sujeita à divisão de palavras. Então, você gostaria de citá-los para evitar isso.
Com bash
, dash
, pdksh
, yash
, zsh
, é relativamente fácil:
echo "'echo "\'echo "\\'echo "\\\\'echo whatever\\\\'"\\'"\'"'"
Com o shell Bourne ou Korn, você também precisa escapar do "
, então isso se torna:
echo "'echo \"\'echo \\"\\'echo \\\\"\\\\'echo whatever\\\\'\\\\"\\'\\"\'\"'"
Compare com:
echo "$(echo "$(echo "$(echo "$(echo whatever)")")")"