mantendo uma string (especialmente! sinal) em uma variável e exibindo-a

1

Eu quero colocar uma string (composta especialmente de ! sign) em uma variável, digamos,

var="!f then"

Então eu quero mostrar a string ou usá-la em outro lugar:

echo $var

Mas quando eu digito com var="!f then" , é mostrado o seguinte:

var="for f in Tor*; do mv "$f" "$f-Win"; done then"

Se eu usar escape como var="\!f then" , o caractere de escape também vem na string.

$ echo $var  
\!f then

Como posso usar ! como um elemento em uma string?

    
por رشاد خان 28.12.2017 / 06:14

2 respostas

1

Essa é a bash Expansão do Histórico que você está enfrentando:

!string
  Refer to the most recent command preceding the current position
  in the history list starting with string.

Como eu explico aqui , a expansão do histórico é feita entre aspas duplas, portanto, restam duas maneiras de citar ! :

var=\!f\ then # either use <b>only</b> backslash
var='!f then' # or just single quotes
    
por dessert 28.12.2017 / 10:05
0

O caractere ! é um caractere especial que bash usa para introduzir um comando de histórico (consulte man bash ) e é usado como !! para executar novamente o próximo comando. Use \! em vez disso.

    
por waltinator 28.12.2017 / 06:22