学习SHELL编程时遇到一个问题,是BUG还是我弄错了?
我本来想试一下$@和$*这两个变量的区别的,于是使用vi编写一个简单的脚本如下:
root@ubuntu:/home/rebi/c# vi showarg
#!/bin/bash
eco "all argument list(@): $@"
echo "all argument list(*): $*"
#end
接着执行,不传递任何参数进去:
root@ubuntu:/home/rebi/c# . showarg
all argument list(@):
all argument list(*):
如上结果没有问题,参数为空。
但接下来,我使用set定义了一个叫str的串后,再不传递任何参数,执行,却发现$@和$*都变成了str:
root@ubuntu:/home/rebi/c# set str="hello"
root@ubuntu:/home/rebi/c# . showarg
all argument list(@): str=hello
all argument list(*): str=hello
于是果断unset str,再执行,发现问题依旧。。。
root@ubuntu:/home/rebi/c# unset str
root@ubuntu:/home/rebi/c# . showarg
all argument list(@): str=hello
all argument list(*): str=hello
如果带参数的话,就不会出现上面的str=hello。实在是搞不懂这是什么原因,在SuSE和Ubuntu下都试过了。