在shell的未知变量参数中,有2个需要特别注意的地方,即$@和$*。先分别做下解释:

$*
扩展为从1 开始的所有位置参数。如果它出现在双引号中,则扩展为一个包含每个参数的单词,参数
之间用特殊变量IFS 的第一个字符分隔。也就是说,"$*" 和"$1c$2c..." 是等价的;其中,c 是特殊
变量IFS 的第一个字符。如果IFS 没有设置,则参数之间用空格分隔。如果IFS 为空,则参数直接相
连,中间没有分隔。

$@

扩展为从1 开始的所有位置参数。如果它出现在双引号中,则每个参数都扩展为一个单词;也就是说
"$@"和"$1c" "$2c" ...是等价的。其中,c 是特殊变量IFS 的第一个字符。如果IFS 没有设置,则
参数之间用空格分隔。如果IFS 为空,则参数直接相连,中间没有分隔。如果这这样的双引号扩展发
生中单词里面,则第一个参数扩展后与原单词的开始部分连在一起,而最后一个参数扩展后与原单词
的最后一个部分连在一起。如果没有位置参数,则"$@" 和$@ 扩展后为空,也即它们会被删除。

实例脚本

#!/bin/bash
for i in $* 
 do
   echo "You enter the $i ."
 done
执行./test.sh www info org

输出结果

www

info

org

将$*设置为"$*"

则输出结果

www info org

此处很容易发生混淆需多加注意。