不回引号时, $@ 和 $* 相同 加双引号时 参数: "1 2" 4 "$@" 表示所有的参数,即 "1 2" 4 "$*" 表示把所有的参数扩展并形成一个字符串 "1 2 4" set -- "1 2" 4 现在有两个参数: "1 2" 和 4 for i in $@;do echo "[$i]";done [1] [2] [4] 空格没有了 for i in $*;do echo "[$i]";done [1] [2] [4] 空格没有了 for i in "$@";do echo "[$i]";done [1 2] [4] 完整的两个参数,与你先前输入的参数一样 for i in "$*";do echo "[$i]";done [1 2 4] 就剩一个字符串了,但是,第一个参数的空格仍然是保留的。