linux在执行可执行文件后面跟上有通配符的参数时,做了什么?

test.sh:

#!/bin/bash
echo "$1"

此时文件夹下有下面这些文件a,aa,aaa,aaaa
当我们执行./test.sh a*时,输出如下

a

为什么会这样呢?在我们执行ls a*时输出如下:

a aa aaa aaaa

在相同的情况下我们自己的脚本却只获得了a而不是a*

修改脚本test.sh:

#!/bin/bash
echo "$#"
echo "$1"
echo "$2"
echo "$3"
echo "$4"

上面的命令作用是输出参数个数,执行的结果如下

4
a
aa
aaa
aaaa

结果发现参数不是我们传递进去的一个,而是四个。

我们用来执行命令的终端本身就是一个程序,在执行一些关于通配符的命令时,终端就已经把通配符解释成了通配后的结果,所以执行了./test.sh a*实际上等同于执行了./test.sh a aa aaa aaaa

如果想要获取a*,那么必须告诉终端这不是这个通配符./test.sh a\*或者./test.sh "a*"

你可能感兴趣的:(linux在执行可执行文件后面跟上有通配符的参数时,做了什么?)