0

そのため、Bash での 2 つの結果の違いを理解しようとして、位置パラメーターの理解を深めようとしています。

$ find ./*.md
one.md
two.md
three.md
four.md

と:

$ ./findall.sh ./*.md
one.md

どこにfindall.shある:

#!/usr/bin/env bash
find $1 

私の理解では、これら 2 つの操作は同一である必要がありますが、位置パラメータを使用すると 1 つのアイテムしか返されないようです。何が得られないのですか?

4

1 に答える 1

1

どちらの場合も、インタラクティブな bash は を./*.md呼び出す前に展開されますfind。したがって、最初のコマンドは次のように展開されます。

find ./one.md ./two.md ./three.md ./four.md

2 番目のケースでは、コマンドは次のように展開されます。

./findall.sh ./one.md ./two.md ./three.md ./four.md

次に、スクリプトが実行され、スクリプト内のコマンドが次のように展開されます。

find ./one.md

おそらく、ワイルドカードを引用するつもりでした:

find './*.md'
./findall.sh './*.md'

ただし、どちらの場合でも、findへの最初の引数find( で始まる引数の前-) が検索対象のディレクトリの名前であるため、 は失敗します。という名前のディレクトリはありません。ファイル名またはディレクトリ名には使用できない./*.mdためです。/

*.mdおそらく、現在のディレクトリの下の任意の場所で、名前が一致するすべてのファイルを見つけるために、これを意味していたのでしょう。

find . -name '*.md'

おそらく、名前が一致する現在のディレクトリ(サブディレクトリではない)内のすべてのファイルを見つけるために、これを意味していました*.md

find . -maxdepth 1 -name '*.md'
于 2016-01-26T21:30:27.857 に答える