2019独角兽企业重金招聘Python工程师标准>>>

在Bash脚本中,$*和$@都用于表示执行脚本时所传入的参数。先通过一个例子看看他们的区别:

#!/bin/bash
# testvar.sh
echo "-------------ISF is set to \"-seperator\" ------------"
IFS="-seperator";  # 注意 seperator前有一个减号(-)
for i in "$@"; do echo "@ '$i'"; done
for i in "$*"; do echo "* '$i'"; doneecho "-------------ISF is set to null ------------------------"
IFS=
for i in "$@"; do echo "@ '$i'"; done
for i in "$*"; do echo "* '$i'"; doneecho "-------------ISF is unset ------------------------"
unset IFS
for i in "$@"; do echo "@ '$i'"; done
for i in "$*"; do echo "* '$i'"; doneecho "---------$* and $@ are not put into double quotes(\"\")-------"
for i in $@; do echo "@ '$i'"; done
for i in $*; do echo "* '$i'"; done

执行的结果如下:

-------------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 ..."
但$@的展开和没有加双引号的情形是一致的。

转载于:https://my.oschina.net/aiguozhe/blog/35905

[原创]Bash中的$*和$@的区别相关推荐

  1. Bash中的$*和$@的区别

    在Bash脚本中,$*和$@都用于表示执行脚本时所传入的参数.先通过一个例子看看他们的区别: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  2. bash中(),{},(()),[],[[]]的区别

    前言:在bash中遇到各种括号,同时在进行字符数值比较判定时,总是不断出现问题,于是通过参考<advanced bash-scripting guide>,同时在centos 6.7版本上 ...

  3. Bash中的管道输出和捕获退出状态

    我想执行Bash中长时间运行的命令,都捕获它的退出状态,并且发球它的输出. 所以我这样做: command | tee out.txt ST=$? 问题在于变量ST捕获了tee而不是命令的退出状态. ...

  4. 如何检查Bash中是否设置了变量?

    我如何知道是否在Bash中设置了变量? 例如,如何检查用户是否将第一个参数赋予函数? function a {# if $1 is set ? } #1楼 检查是否设置了变量 var="&q ...

  5. 面试必问一:Java 中 == 和 equals 的区别你知道吗

    面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...

  6. source ubuntu 退出_ubuntu停source、sh、bash、/执行脚本的区别

    ubuntu下source.sh.bash../执行脚本的区别 source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename ...

  7. shell变量加单引号sql_关于shell:在Bash中的命令中扩展变量的单引号

    我想从bash shell脚本中运行一个命令,该脚本在单引号和变量中包含单引号和一些其他命令. 如repo forall -c '....$variable'. 在这种格式中,对$进行转义,不展开变量 ...

  8. bash中 21 的解释

    1.首先,bash中0,1,2三个数字分别代表STDIN_FILENO.STDOUT_FILENO.STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制 ...

  9. Bash中的位置参数和特殊参数

    #Bash中的位置参数和特殊参数 #Bash中的位置参数是由0以外的一个或多个数字表示的参数. #位置参数是当Shell或Shell函数被引用时由Shell或Shell函数的参数赋值,并且可以使用Ba ...

最新文章

  1. 杀毒软件原理后续阶段
  2. VTK:InfoVis之PKMeansClustering
  3. TZOJ 3030 Courses(二分图匹配)
  4. STM32之输入捕获
  5. Jmeter之JSON Path Extractor的使用(JSON-handle下载安装和使用)
  6. 开源框架_Index
  7. java装箱与拆箱_【转】java 自动装箱与拆箱
  8. C# WIN7电脑双屏设置不同内容的桌面
  9. 写了个算分压电阻阻值的MATLAB小程序
  10. [AutoCAD.Net][事件] AUTOCAD 选择对象后触发事件
  11. Linux iptable文档
  12. phpcms 允许英文目录有空格
  13. 张家港、张家口、张家界、张家川
  14. 捡到的苹果手机怎么解id锁_苹果手机维修中软解和硬解的区别
  15. jdon的设计模式详细解读
  16. 测绘专硕要学计算机吗,测绘工程专硕专业介绍_测绘工程非全日制研究生(专业硕士)_125在职研究生...
  17. 媒体播控系统、信息发布系统 使用说明
  18. Python相关库的安装
  19. MQ消息队列(三)RabbitMQ及Erlang安装过程中常见问题
  20. 一、瑞萨RZN2L介绍和各处理器概念

热门文章

  1. linux的自定义input,Linux Input子系统之第一篇(input_dev/input_handle/input_handler)
  2. php常见排序算去,PHP兑现常见排序算法
  3. Java项目:房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)
  4. 【基础知识】截长图的方法以及防止截图时下拉框自动收回的方法
  5. 【js】common.jsp的使用
  6. iOS UIView快速添加事件
  7. (转)如何修改maven的默认jdk版本
  8. REACT day 1
  9. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(六)ndoutils安装
  10. 清理SQL多余登录信息