私はワイルドカード再帰ワイルドカードを学んでいて試しました。
$ ls **/* | wc -l
15
$ ls */** | wc -l
15
彼らは同じ結果を出力します。
**/*
との間に違いがありますか*/**
?
答え1
*/**
ディレクトリ(およびそのサブディレクトリとファイル)のみが一致します。現在のディレクトリ(ディレクトリではない)のファイルは一致しません。*/
その理由は、globstar拡張を開始する前にディレクトリプレフィックスが必要なためです**
。の場合、オプションに応じて現在のディレクトリの下のすべてのファイルとディレクトリに展開されるため、**/*
末尾/*
は関係ありません。この時点ですべてのディレクトリが拡張されたため、末尾は何も一致しません。**
dotglob
/*
ls
「有用に」読むことができるので、テストするときは注意してください。入力する渡すことができるすべてのディレクトリは次のとおりです。
printf "%s\n" */**
printf "%s\n" **/*
また、配管を使用するとwc -l
実際の数が間違っている可能性があります。
$ touch a $'b\nc'
$ ls -1
a
b?c
$ ls | wc -l
3 ## WRONG!