ファイルを検索するとき
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