[!set] zsh で履歴拡張を呼び出すとき

[!set] zsh で履歴拡張を呼び出すとき

ファイルを検索するとき

ls [a-t]est.txt

test.txt期待した結果を提供します。

しかし、私が使うとき

ls [!a-g]est.txt

出力は次のとおりですls [aptg]est.txt

[!set]の他の例:

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

私のzshに問題がありますか?それとも[!set]はzshとは異なる動作をしますか?


マシンはLinux Mint 18.2です。

答え1

Steeldriverが提案したように、代わりにmake [!set]を^実行すると!問題が解決します。

その理由は、履歴拡張がzshで!実行されるためです。これが発生しないようにするには、履歴拡張を無効にしてください。これを行うには、setopt nobanghistコマンドラインから実行してください。

答え2

履歴の拡張を回避する1つの方法は、!バックスラッシュを引用することです。

ls [\!a-g]est.txt

^もちろん、セットを否定するときは、置換を使用する方が簡単かもしれません!

!"別の方法は、(前の)最初の文字の前にどこにも(本当に!)文字シーケンスを追加して、履歴拡張を一時的に無効にすることです!!"削除され、その後のコンテンツは特に!意味がありません。

!" ls [!a-g]est.txt
ls !" [!a-g]est.txt
ls [!"!a-g]est.txt
l!"s [!a-g]est.txt

関連情報