Ao usar [! set] zsh invoca a expansão do histórico

0

Quando estou procurando um arquivo com

ls [a-t]est.txt

dá o resultado test.txt como esperado

No entanto, quando eu uso

ls [!a-g]est.txt

a saída é ls [aptg]est.txt

Alguns outros exemplos para [! set]:

  • ls [!b-z]est.txt retorna [bbz]est.txt
  • ls [!g-h]est.txt retorna ls [git clone --depth=1h]est.txt

Há algo errado com o meu zsh, ou o [! set] funciona de maneira diferente em zsh?

A máquina é Linux Mint 18.2

    
por urben 19.07.2017 / 02:59

2 respostas

2

Conforme proposto pela steeldriver, ^ no lugar de ! faz [! set] resolver o problema.

O motivo disso é que em zsh ! aciona a expansão do histórico. Se você não quiser que isso aconteça, desative a expansão do histórico. Para isso, execute setopt nobanghist na linha de comando.

    
por 19.07.2017 / 04:35
2

Uma maneira de evitar a expansão do histórico é citar ! de uma barra invertida:

ls [\!a-g]est.txt

É claro que, ao negar um conjunto, é mais fácil usar apenas ^ em vez de ! .

Outra maneira é desativar temporariamente a expansão do histórico adicionando a seqüência de caracteres !" em qualquer lugar (realmente!) antes do (anteriormente) primeiro ! . !" será removido e qualquer ! subsequente não terá significado especial.

!" ls [!a-g]est.txt
ls !" [!a-g]est.txt
ls [!"!a-g]est.txt
l!"s [!a-g]est.txt
    
por 19.07.2017 / 23:13

Tags