bash: coloca texto em uma variável sem precisar escapar de caracteres

0

Eu quero colocar essa string em uma variável sem ter que se preocupar em escapar de qualquer coisa dentro dela.

j!'^+%&/()=1!'^+%&/()c

TRY 1: (com falha)

VAR='''j!'^+%&/()=1!'^+%&/()c'''
bash: !'^+%: event not found

o que devo fazer?

    
por Tom Hale 21.02.2017 / 07:51

2 respostas

5

De esta resposta :

$ IFS='' read -r -d '' var <<'EOF'
j!'^+%&/()=1!'^+%&/()c
EOF
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

Ou aceite a entrada por meio de um programa diferente do shell usando cat :

$ var=$(cat)
j!'^+%&/()=1!'^+%&/()c        
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

Após sua entrada, pressione Enter e então Ctrl + D .

Ou usando bash ' printf :

$ xargs -0 printf "\n%q\n"
j!'^+%&/()=1!'^+%&/()c
'j!'\''^+%&/()=1!'\''^+%&/()c'
$ var='j!'\''^+%&/()=1!'\''^+%&/()c'
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

Aqui, você precisará não pressionar Enter , mas pressionar Ctrl + D duas vezes depois de inserir o texto a ser citado.

    
por 21.02.2017 / 08:31
2

Eu faço muito disso e decidi apenas colocar toda a string entre aspas duplas e escapar de aspas duplas (\ ") ou cifrões (\ $). Isso é mais fácil de lembrar do que qualquer outra coisa.

Outra técnica frequentemente negligenciada é concatenar cadeias adjacentes dentro de citações diferentes.

VAR=" string without double-quotes "' string with "double-quotes" '

Aqui, incluí espaços extras apenas para que as citações se destaquem. A aspa dupla seguida de uma aspa simples no centro não pode ter espaço nem nada entre eles. Eles estão no final da primeira string e no início da segunda string, respectivamente. Estar adjacente concatena as duas cadeias.

    
por 21.02.2017 / 10:41

Tags