$*
在shell脚本中究竟意味着什么?
例如,考虑下面的代码片段
$JAVA_HOME/bin/java/com/test/Testclass $*
它意味着所有传递给脚本或函数的参数,按字分开。
这通常是错误的,应该用"$@"
代替,它正确地分隔了参数。
很容易找到自己的答案: man bash
→ /\$\*
:
特殊参数
shell专门处理几个参数。 这些参数只能被引用; 不允许分配给他们。
- 从一个开始扩展到位置参数。 当扩展出现在双引号内时,扩展为单个字,每个参数的值由
IFS
特殊变量的第一个字符分隔。 也就是说,"$*"
相当于"$1c$2c..."
,其中c
是IFS
变量值的第一个字符。 如果IFS
未设置,则参数由空格分隔。 如果IFS
为空,则参数在不插入分隔符的情况下进行连接。
$*
扩展为传递给该shell脚本的所有参数。
$0
= shell脚本的名字
$1
=第一个参数
$2
=第二个参数…等等
$#
=传递给shellscript的参数数目