当前位置: 首页 > news >正文

Shell - 学习笔记 - 2.6 - Shell $*和$@之间的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,我们已在《Shell特殊变量》一节中进行了演示,本节重点说一下它们之间的区别。

当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。

但是当它们被双引号" "包含时,就会有区别了:

  • "$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。

  • "$@"仍然将每个参数都看作一份数据,彼此之间是独立的。

比如传递了 5 个参数,那么对于"$*"来说,这 5 个参数会合并到一起形成一份数据,它们之间是无法分割的;而对于"$@"来说,这 5 个参数是相互独立的,它们是 5 份数据。

如果使用 echo 直接输出"$*"和"$@"做对比,是看不出区别的;但如果使用 for 循环来逐个输出数据,立即就能看出区别来。

编写下面的代码,并保存为 test.sh:

#!/bin/bash

echo "print each param from \"\$*\""

for var in "$*"

do

    echo "$var"

done

echo "print each param from \"\$@\""

for var in "$@"

do

    echo "$var"

done

运行 test.sh,并附带参数:

[mozhiyan@localhost demo]$ . ./test.sh a b c d

print each param from "$*"

a b c d

print each param from "$@"

a

b

c

d

从运行结果可以发现,对于"$*",只循环了 1 次,因为它只有 1 分数据;对于"$@",循环了 5 次,因为它有 5 份数据。

参考:

Shell $*和$@之间的区别 (biancheng.net)

相关文章:

  • 延伸与应用(三)婚姻与经济、运动、宗教、科技与经济
  • Windows11通过Hyper-V创建VM,然后通过vscode连接vm进行开发
  • 我的数据结构c(给自己用的)
  • 无需 Root 卸载手机预装软件,精简过的老年机又行了
  • asp.net 404页面配置、 asp.net MVC 配置404页面、iis 配置404页面,指定404错误页面,设置404错误页面
  • 使用 Python 进行自然语言处理第 3 部分:使用 Python 进行文本预处理
  • C++ 菱形继承和虚拟菱形继承
  • C++引用详解
  • 在WebSocket中使用Redis出现空指针异常解决方案
  • Linux——如何使用sftp命令轻松上传和下载文件
  • HTTPS实现原理
  • 软件工程知识梳理2-需求分析
  • 离线使用Element UI和Vue
  • Spring Cloud Gateway
  • linux☞ Centos 基础篇
  • AHK 中 = 和 == 等比较运算符的用法
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • ES6 ...操作符
  • extract-text-webpack-plugin用法
  • Hibernate最全面试题
  • Java 23种设计模式 之单例模式 7种实现方式
  • java取消线程实例
  • k8s 面向应用开发者的基础命令
  • Laravel 菜鸟晋级之路
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • mac修复ab及siege安装
  • Node + FFmpeg 实现Canvas动画导出视频
  • Octave 入门
  • Python 反序列化安全问题(二)
  • Python学习之路16-使用API
  • rabbitmq延迟消息示例
  • vue-router的history模式发布配置
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 订阅Forge Viewer所有的事件
  • 解析带emoji和链接的聊天系统消息
  • 看域名解析域名安全对SEO的影响
  • 力扣(LeetCode)357
  • 三栏布局总结
  • 双管齐下,VMware的容器新战略
  • 算法系列——算法入门之递归分而治之思想的实现
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二开)Flink 修改源码拓展 SQL 语法
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程