Como escrever o símbolo “!” entre aspas duplas no bash? [duplicado]

0
    

Esta pergunta já tem uma resposta aqui:

    

Não consigo descobrir como escrever o símbolo ! em scripts bash ao colocá-lo em strings de aspas duplas.

Por exemplo:

var="hello! my name is $name! bye!"

Algo louco acontece:

$ age=20
$ name='boda'
$ var="hello! my name is $name! bye!"

Quando pressiono enter no último comando, o comando se repete (digita a si mesmo) sem o último ! :

$ var="hello! my name is $name! bye"

Se eu pressionar enter novamente

$ var="hello! my name is $name bye"

Se eu pressionar enter novamente, desaparecerá nada será enviado

$ 

Se eu tentar isso:

$ echo "hello\! my name is $name\! bye\!"

Em seguida, o resultado é: hello\! my name is boda\! bye\!

Se eu usar aspas simples, meu nome não será expandido:

$ echo 'hello! my name is $name! bye!'

As saídas são: hello! my name is $name! bye!

Eu tenho isso funcionando assim:

$ echo "hello"'!'" my name is $name"'!'" bye"'!'

Mas é uma grande confusão com " e ' impossíveis de entender / editar / manter / atualizar.

Alguém pode ajudar?

    
por bodacydo 29.11.2015 / 10:05

2 respostas

1

Como você descobriu, ! não aciona a expansão do histórico entre aspas simples.

Você pode usar printf com uma string de formato contendo os símbolos ! entre aspas simples. Por exemplo:

$ name="boda"
$ printf 'hello! my name is %s! bye!\n' "$name"
hello! my name is boda! bye!

ou

$ name="boda"
$ var=$(printf 'hello! my name is %s! bye!\n' "$name")
$ echo "$var"
hello! my name is boda! bye!
    
por 29.11.2015 / 10:26
2

Desativar a expansão do histórico; que só é habilitado em shells interativos, via: set +H .

    
por 29.11.2015 / 10:10