在 Linux Bash 中普通的 glob 只能用于路径名吗?

2021-05-25 10:41:54 +08:00
 AndyAO

我在使用 Bash 之前一直在使用 PowerShell,在 PowerShell 上通配符可以用于很多很多的命令。

但是 Bash 上的通配符好像不是这样,目前看到的所有资料好像都是在将 glob 用于路径名。

而且 echo * 居然会直接显示当前目录下的所有内容,给人的感觉就是所有的字符串只要有*,好像都会首先被解释为路径通配符。

在 bash 中 glob 只能用于路径吗?

如果不是的话,那还用于什么场合呢?

注意:这里指的是普通的 glob,而非 extglob,我知道后者能用于条件表达式的=和!=

1184 次点击
所在节点    Linux
6 条回复
codehz
2021-05-25 11:18:32 +08:00
Linux 的 glob 是 shell 处理的
Windows 是直接传原始命令行
hsfzxjy
2021-05-25 11:45:45 +08:00
echo '*' 就不会展开了
napsterwu
2021-05-25 13:24:16 +08:00
*是特殊字符,需要加斜杠转义或者用单引号括起来
AndyAO
2021-05-26 11:01:41 +08:00
@codehz 任何命令的实际参数中只要有类似于*这样的元字符,Shell 都会预先处理,返回路径数组?
AndyAO
2021-05-26 11:02:22 +08:00
@hsfzxjy 为什么会出现这种情况?
这个现象有文档记录吗?如果有在哪?
no1xsyzy
2021-05-26 11:27:24 +08:00
@AndyAO `man bash` ,搜索 「 Pathname Expansion 」
传入了以后如何看待这个 '*' 是被调用的程序本身的想法,说不定被认为是正则的一部分,或者 python -c "print(*range(100))"
请亲手试试以下代码在不同系统下的行为:

python -c "import sys; print(sys.argv)" *

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX