私はLinux / Bashで二重引用符が必要な時期と理由に関する規則を完全に理解したことがないと思います(この質問のドメインがLinux、Bash、または他のものかどうかはわかりません)。*
私は文字数に関係なく(なしを含む)一致すると思います。ウィキペディア記事。ただし、次のようにワイルドカードを使用しようとすると、*
理解できない結果が表示されます。
>pwd
/home/user/foo/foo/test
>tree
.
├─ main.opp
└─ test
└─ test.opp
>find ../ -name *.opp
../test/test.opp
>find ../ -name "*.opp"
../main.opp
../test/test.opp
>cd ..
>pwd
/home/user/foo/foo
>find . -name *.opp
./main.opp
>find . -name "*.opp"
./main.opp
./test/test.opp
find
二重引用符ではなくパラメータを*.opp
使用すると1つのヒットのみが返されますが、同じパラメータを二重引用符として使用すると予想される2つのヒットが返されるのはなぜですか?
答え1
拡張が評価される時期によって異なります。アスタリスクを引用しない場合、bash は最初にアスタリスクを評価します。を呼び出すのと同じですfind . -name main.opp
。アスタリスクを引用すると、どれが期待された方法で使用されているかを見つけるためにそのまま渡されます。
答え2
引用符がない場合、bashは現在のディレクトリに一致するファイルがある場合はアスタリスクを展開します。ここではecho
、拡張をデバッグするために使用します。
~/foo/foo/test$ echo find ../ -name *.oop
find ../ -name test.oop
~/foo/foo/test$ cd ..
~/foo/foo$ echo find . -name *.oop
find . -name main.oop
あなたが探しているものが正しい場合一致するものはありません。現在のディレクトリでは拡張されません。
~/foo/foo$ echo find . -name test.*
find . -name test.*
~/foo/foo$ find . -name test.*
./test/test.oop