使用提示、位置参数无法理解 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'
所以我试图了解 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'