echo!()が現在のディレクトリの内容を印刷するのはなぜですか?

echo!()が現在のディレクトリの内容を印刷するのはなぜですか?

私は様々なbash「予約語」の意味を自分で教えてきました。

これを実行中に、誤ってコマンドを入力しました。

echo !()

驚くべきことに、このコマンドはコマンドと同じ出力を実行して生成します。

echo *

つまり、出力は現在のディレクトリの内容のリストです。

file1 file2 directory1 directory2

!()bashが本質的に拡張されるのはなぜですか*

()他の文脈では間違った表現であるようで意味を判断できません。

ベストアンサー1

これはバッシュです。extglobパターンマッチングKornシェル(そのサブセット)から構文をコピーします。!(pattern)extglob何らかの方法で有効にすると(たとえば、bash_completionインタラクティブシェルのアドインを介して)、現在の作業ディレクトリで一致しない(デフォルトでは隠されていない)ファイルの名前に展開されますpattern

空のパターンを使用する場合は、名前が現在ディレクトリにあるすべてのファイルを意味します。いいえ空の文字列ですが、ファイル名は空白にできないため、これはすべて(デフォルトでは隠されていない)ファイルです。

オプションが有効になると、zshkshと同じ結果が得られます。echo ^extendedglob^pattern!(pattern)

おすすめ記事