我在使用 Bash 之前一大带宽服务器直在使用 PowerShell,在 PowerShell 上通配符可以用于很多很多的命令。
但是 Bash 上的通配符好像不是这样,目前看到的所有资料好像都是在将 glob 用于路径名。
而且 echo *
居然会直接显示当前目录下的所有内容,给人的感觉就是所有的字符串只要有*
,好像都会首先被解释为路径通配符。
在 bash 中 glob 只能用于路径吗?
如果不是的话,那还用于什么场合呢?
注意:这里指的是普通的 glob,而非 extglob,我知道后者能用于条件表达式的=和!=
Linux 的 glob 是 shell 处理的
Windows 是直接传原始命令行
(
echo '*' 就不会展开了
*是特殊字符,需要加斜杠转义或者用单引号括起来
任何命令的实际参数中只要有类似于*这样的元字符,Shell 都会预先处理,返回路径数组?
为什么会出现这种情况?
这个现象有文档记录吗?如果有在哪?
`man bash` ,搜索 「 Pathname Expansion 」
传入了以后如何看待这个 '*' 是被调用的程序本身的想法,说不定被认为是正则的一部分,或者 python -c "print(*range(100))"
请亲手试试以下代码在不同系统下的行为:
python -c "import sys; print(sys.argv)" *