使用提示、位置参数无法理解 bash 的 'find' 输出差异

trouble understanding difference in 'find' output for bash using prompt, positional parameters

所以我试图了解 Bash 中两个结果之间的差异,以加深我对位置参数的理解:

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

和:

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

其中 findall.sh 是:

#!/usr/bin/env bash
find  

在我的理解中,这两个should操作应该是相同的,但是位置参数的使用好像return只有一项。我没有得到什么?

在这两种情况下,您的交互式 bash 在调用 find 之前扩展 ./*.md。所以你的第一个命令扩展为:

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

在第二种情况下,您的命令扩展为:

./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'