通辽做网站的公司,vps wordpress,时空赣州网,建站工具箱接线图在bash中执行的命令#xff0c;有些参数经常会带个通配符的#xff0c;但是你知道这个参数是何时展开的吗#xff1f;
先来看下简单的bash小代码#xff1a;
[zcmdebug #88]$cat del.sh #!/bin/bashif [ $# -lt 2 ]; thenecho Usage: $0 separator fil…在bash中执行的命令有些参数经常会带个通配符的但是你知道这个参数是何时展开的吗
先来看下简单的bash小代码
[zcmdebug #88]$cat del.sh
#!/bin/bash
if [ $# -lt 2 ]; then
echo Usage: $0 separator files
exit 1
fi
echo $1
echo $2
echo $3 再来看执行过程
[zcmdebug #89]$./del.sh *.txt
a.txt
b.txt
c.txt
[zcmdebug #90]$./del.sh *.txt
Usage: ./del.sh separator files
[zcmdebug #91]$ls aad/
a.txt b.txt c.txt
[zcmdebug #92]$./del.sh aad/*.txt
aad/a.txt
aad/b.txt
aad/c.txt
[zcmdebug #93]$./del.sh aad/*.txt
Usage: ./del.sh separator files
[zcmdebug #94]$ 看出区别了吗输入参数中 *.txt 有一个带了双引号一个没带运行结果就不一样了。
结论带双引号的*.txt在命令行中是当作一个整体传入的但是不带双引号的*.txt在传给bash解释器之前就已经被替换为它的结果(即a.txt b.txt c.txt)。
所以带双引号的*.txt在运行时出错提示参数个数不足而另一个却因为输入参数个数充足而没有提示出错!