Bash中的$*和$@的区别
2015-11-10 11:06
411 查看
在Bash脚本中,$*和$@都用于表示执行脚本时所传入的参数。先通过一个例子看看他们的区别:
执行的结果如下:-------------ISF is set to "-seperator" ------------@ 'aa'@ 'bb'@ 'cc'* 'aa-bb-cc'-------------ISF is set to null ------------------------@ 'aa'@ 'bb'@ 'cc'* 'aabbcc'-------------ISF is unset ------------------------@ 'aa'@ 'bb'@ 'cc'* 'aa bb cc'---------aa bb cc and aa bb cc are not put into double quotes("")-------@ 'aa'@ 'bb'@ 'cc'* 'aa'* 'bb'* 'cc' 由此可见,1) 当不加双引号("")时, $*,$@被展开时的行为是一样的;2) 当$*,$@都被放到双引号("")内; 2.1) 如果设置了变量IFS的值并且该值非空, 则$*被展开时使用${IFS}的第一个字符将所有参数(除了参数$0)连接起来, 即"$1c$2c$3c...",其中c表示${IFS}的第一个字符; 2.2) 如果变量IFS为空, 则$*被展开时只是将所有参数(除了参数$0)简单连接起来, 即 “$1$2$3..." 2.3)如果变量IFS没有被定义, 则$*被展开时使用空格字符将所有参数(除了参数$0) 连接起来, 即"$1 $2 $3 ..." 但$@的展开和没有加双引号的情形是一致的。
123456789101112131415161718192021 | #!/bin/bash# testvar.shecho "-------------ISF is set to \"-seperator\" ------------"IFS="-seperator"; # 注意 seperator前有一个减号(-)for i in "$@"; do echo "@ '$i'"; donefor i in "$*"; do echo "* '$i'"; done echo "-------------ISF is set to null ------------------------"IFS=for i in "$@"; do echo "@ '$i'"; donefor i in "$*"; do echo "* '$i'"; done echo "-------------ISF is unset ------------------------"unset IFSfor i in "$@"; do echo "@ '$i'"; donefor i in "$*"; do echo "* '$i'"; done echo "---------$* and $@ are not put into double quotes(\"\")-------"for i in $@; do echo "@ '$i'"; donefor i in $*; do echo "* '$i'"; done |
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天