Exclamação nos argumentos do comando bash [duplicado]

1

Se eu digitar o seguinte comando no Bash:

echo "dog!!"

Eu não obtenho a string dog!! . Em vez disso, obtenho outra coisa.

Eu tentei fazer eco da string "dog!!" fazendo eco de "dog\!\! , mas também não funciona.

Como posso usar argumentos de comando quando há dois pontos de exclamação?

Eu quero que esses pontos de exclamação sejam tratados como pontos de exclamação sem nenhuma função especial.

Dois pontos de exclamação "!!" parecem ser o último comando.

    
por Fibaxi 04.04.2017 / 09:03

3 respostas

5

Você precisa escapar dos pontos de exclamação ou usar aspas simples :

echo dog\!\!
echo 'dog!!'

(Isto não explica porque o seu echo "dog\!\!" não funciona, mas deve funcionar, não sei porque não funcionaria. Ou pelo menos, não deveria agir no histórico; no Bash irá produzir dog\!\! .)

    
por 04.04.2017 / 09:04
4

No Bash, se você quiser que os pontos de exclamação sejam sempre tratados como caracteres regulares e não precisam da expansão do histórico, você pode desativá-lo para o shell atual com

set +o histexpand

Ou adicione o comando aos arquivos de configuração comuns , ou seja provavelmente .bashrc para desativá-lo para todos os shells.

    
por 04.04.2017 / 10:25
0

No Linux Mint 18.1 baseado no Ubuntu 16.04 com:

bash --version | head -1
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)

O comportamento é o seguinte:

echo dog\!\!

resulta em:

dog!!
echo 'dog!!'

resulta em:

dog!!
echo "dog!!"

imprime inesperadamente o cão seguido pelo último comando; por exemplo. se você fez ls antes, imprime:

echo "dogls"
dogls

Em GNU / Linux Debian 9 Stretch existe uma versão ligeiramente mais nova:

bash --version | head -1
GNU bash, version 4.4.11(1)-release (x86_64-pc-linux-gnu)

O comportamento é o seguinte:

echo dog\!\!

resulta em:

dog!!
echo 'dog!!'

resulta em:

dog!!
echo "dog!!"

imprime inesperadamente o cão seguido pelo último comando; por exemplo. se você fez ls antes, imprime:

echo "dogls"
dogls

Parece consistente para mim.

Pode ser possível que, em sistemas antigos com versão mais antiga de bash , ele se comporte um pouco diferente. Mas em novos sistemas, podemos esperar esse comportamento.

    
por 04.04.2017 / 11:27