$@和$*的区别

730阅读 0评论2010-05-31 greendays
分类:

寂寞烈火:
这样比较一下
for i in $@;do echo $i;done
for i in "$@";do echo $i;done

黑哥:
$@经过参数展开后,还要word splitting,


"$@"经过参数展开后,不再word splitting.

对于"1 2" 4, $@参数展开后:"1 2", "4", word splitting后得到三个字(word): 1, 2,4

"$@"参数展开得到两个字:"1 2","4".

Springwind426:

不回引号时, $@ 和 $* 相同

加双引号时
参数: "1 2" 4
"$@"  表示所有的参数,即 "1 2" 4
"$*" 表示把所有的参数扩展并形成一个字符串 "1 2 4"

  1. set -- "1    2"  4
  2. 现在有两个参数: "1    2" 和 4
  3. for i in $@;do echo "[$i]";done
  4. [1]
  5. [2]
  6. [4]
  7. 空格没有了
  8. for i in $*;do echo "[$i]";done
  9. [1]
  10. [2]
  11. [4]
  12. 空格没有了
  13. for i in "$@";do echo "[$i]";done
  14. [1    2]
  15. [4]
  16. 完整的两个参数,与你先前输入的参数一样
  17. for i in "$*";do echo "[$i]";done
  18. [1    2 4]
  19. 就剩一个字符串了,但是,第一个参数的空格仍然是保留的。
上一篇:MySQL数据库备份和还原的常用命令
下一篇:千金之子不死于市(2)