tentando escapar de citações

0

Eu tentei várias maneiras de imprimir essa linha em um script:

alias myname='export PATH="/path/to/bin:$PATH"'

Todos eles têm problemas diferentes.

A última vez que tentei (e lembre-se!) é:

printf '%s' '%s\n' 'alias myname=' ''\'"export PATH=\"/path/to/bin:$PATH\"" \'''  >> ~/.bashrc

mas não funciona, ele imprime muitas vezes o diretório PATH e na frente de alias myname tem %sn

(eu prefiro usar printf)

    
por George 02.08.2016 / 14:42

2 respostas

1

Se eu entendi a pergunta corretamente, você está tentando adicionar a linha

alias myname='export PATH="/path/to/bin:$PATH"'

para o seu arquivo ~/.bashrc

O tipo óbvio de echo falhará porque $ PATH é expandido na hora errada.

Em vez disso, precisamos fazer algumas citações:

echo "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

Agora você diz que, por algum motivo, deseja usar printf . Então, podemos fazer o mesmo:

printf "%s\n" "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

Se você quiser tratar os dois lados do = como strings separadas:

printf "%s=%s\n" "alias myname" "'export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

E assim por diante.

( printf só aceita um argumento de formato e, em seguida, uma lista de valores).

    
por 02.08.2016 / 15:03
1

Existem duas soluções fáceis. Uma delas é usar um documento aqui em vez de aspas. Use o formulário citado do documento here (onde a parte <<EOF contém um caractere de aspas) para desativar a substituição de variáveis e comandos dentro do documento here.

cat <<\EOF >>~/.bashrc
alias myname='export PATH="/path/to/bin:$PATH"'
EOF

O outro é usar aspas simples ao redor da string que você deseja imprimir. Você pode efetivamente escapar de uma aspa simples em um literal com aspas simples usando '\'' - terminar o literal com aspas simples, acrescentar uma aspa simples literal e iniciar um novo literal com aspas simples.

echo 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

(Você pode otimizar o literal da string vazia final '' .)

Em alguns shells, o comando echo não imprime seu argumento literalmente, e é por isso que a maneira robusta de imprimir uma string é com printf :

printf '%s\n' 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

Nesse caso específico, echo também funciona, pois as únicas expansões executadas são relacionadas a barras invertidas e a - .

    
por 03.08.2016 / 02:29