なぜ?「myscript.txt」コマンドを実行すると、次のように表示されます。
$ ls !(my)*.txt
myscript.txt
hey.txt
$ ls !(my)*.txt
同様に、bashはandをどのように解釈しますか$ ls !(my*).txt
?
ベストアンサー1
!(my)*.txt
myscript.txt
だからマッチ
!(my)
空の文字列の一致*
マッチmyscript
.txt
マッチ.txt
(!(my)
空の文字列と一致するmyscript
か...と一致します。)*
!(my)
m
*
yscript
!(my*).txt
.txt
で終わるがで始まらないファイル名を一致させるには、これを行う必要がありますmy
。
これは!(*)
ksh関連の演算子です。オプションがオンのbash
場合にのみ、そのオプションがオンの場合にのみ、そのオプションもサポートされます。extglob
zsh
kshglob
zsh
また、独自のextendedglob
sと^
否定演算子があります。~
とは別に/まさかオペレーター:
set -o extendedglob
ls -ld -- (^my*).txt
ls -ld -- *.txt~my*
これとは別に/まさか演算子は、ksh93
次の方法で実装できます。
ls -ld -- @(*.txt&!(my*))
または、bash -O extglob
以前のバージョンのkshで使用
ls -ld -- !(!(*.txt)|my*)
ただし、glob全体のパターンの最終フィルタとして使用される演算子zsh
とは異なりますが、globの個々のパスコンポーネントでのみ機能できます(拡張子を除く)。~
!(...)
@(...)
*/b*~f*r
foo/bar
*/b*