Estou tendo problemas para escapar de caracteres no bash. Eu gostaria de escapar de aspas simples e duplas ao executar um comando com um usuário diferente. Para os fins desta pergunta, digamos que eu queira ecoar o seguinte na tela:
'single quote phrase' "double quote phrase"
Como posso escapar de todos os caracteres especiais, se eu também precisar mudar para um usuário diferente:
sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""
Obviamente, isso não produz o resultado certo.
shell
quoting
escape-characters
m33lky
fonte
fonte
bash
está a caminho de me deixar louco.Respostas:
Você pode usar a seguinte sintaxe literal de cadeia de caracteres:
De
man bash
fonte
Em um shell POSIX, supondo que na sua string não haja expansão de variável, comando ou histórico e não haja nova linha, siga estas prescrições básicas:
Para citar uma sequência genérica com aspas simples, execute as seguintes ações:
Substitua qualquer sequência de caracteres sem aspas simples pela mesma sequência por aspas simples iniciais e finais adicionadas:
'aaa' ==> ''aaa''
Escape com uma barra invertida todos os caracteres de aspas simples preexistentes :
' ==> \'
Em particular,
''aaa'' ==> \''aaa'\'
Para citar uma sequência genérica com aspas duplas, execute as seguintes ações:
Adicione aspas duplas à esquerda e à direita:
aaa ==> "aaa"
Escape com uma barra invertida todos os caracteres de aspas duplas e todos os caracteres de barra invertida:
" ==> \", \ ==> \\
Alguns exemplos:
para que seu exemplo possa ser expandido com o seguinte:
fonte
Exemplo simples de escape de aspas no shell:
Isso é feito finalizando um já aberto (
'
), colocando um escapado (\'
) e depois outro ('
).Alternativamente:
Isso é feito finalizando já aberto um (
'
), colocando aspas em outro aspas ("'"
) e abrindo outro ('
).Relacionado: Como escapar de aspas simples em strings de aspas simples? no stackoverflow SE
fonte
A resposta aceita funciona para citações simples (um nível):
Para que o comando seja apresentado, você precisa citar duas vezes.
Este script pode fazer todo o trabalho:
Execute o script para obter:
A primeira linha funciona para eco simples:
A segunda linha funcionará para o comando de aspas duplas:
fonte
eco 'eu sou aluno' não funciona. Mas o seguinte funciona:
echo $ 'eu sou aluno' Na página de manual do bash:
Uma aspas simples pode não ocorrer entre aspas simples, mesmo quando precedida por uma barra invertida. .... Palavras da forma $ 'string' são tratadas especialmente. A palavra se expande para cadeia, com caracteres de escape com barra invertida substituídos conforme especificado pelo padrão ANSI C.
fonte