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*"