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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度解读NVMe计算存储协议-1

随着云计算、企业级应用以及物联网领域的飞速发展,当前的数据处理需求正以前所未有的规模增长,以满足存储行业不断变化的需求。这种增长导致网络带宽压力增大,并对主机计算资源(如内存和CPU)造成极大负担,进…

Python网络爬虫分步走之 – 第一步:什么是网络爬虫?

Python网络爬虫分步走之第一步:什么是网络爬虫? Web Scraping in Python Step by Step – 1st Step, What is Web Crawler? By JacksonML 1. 什么是网络爬虫? 在能够使用Google搜索引擎的场合,你是否尝试过简单搜索&#xff…

【C++】类和对象万字详解

目录 一、类与对象 1、类是什么 二、类和对象的基础知识 2.1 定义类:成员变量和成员函数 2.2 创建对象:实例化一个类的对象。 2.3对象的生命周期:构造函数和析构函数。 a. 构造函数 b. 析构函数 c.小结: 三、成员变量和…

Debezium系列之:深入理解GTID全局事务标识,并记录一次数据库重启造成数据丢失的原因和解决方案

Debezium系列之:深入理解GTID,并记录一次数据库重启造成数据丢失的原因和解决方案 一、背景二、深入理解什么是GTID三、深入理解gtid的uuid部分四、判断GTID之间的顺序大小五、解决方案一、背景 hive数据库的表与源头业务数据库的数据不一致,经过检查发现源头数据库发生了重…

腾讯云雾锁王国游戏服务器上线,10秒钟快速搭建!

随着科技的飞速发展,游戏行业也迎来了前所未有的繁荣。在这个时代,玩家们对游戏的体验需求日益增长,对服务器的稳定性和速度要求也越来越高。为了满足市场需求,腾讯云推出了雾锁王国游戏联机服务器及一键部署方案,只需…

❤ 做一个自己的AI智能机器人吧

❤ 做一个自己的AI智能机器人 看了扣子(coze)的模型,字节基于chatgpt搭建的一个辅助生成AI的网站,感觉蛮有意思,看了掘金以后,于是动手自己也实现了一个。 官网 https://www.coze.cn/ 进入的网站 1、 创…

java之基础知识、零碎知识

MENU java学习路程之篇一、知识点、path环境变量、计算机发展史、数据的存储和运算、人机交互、计算机语言java学习路程之篇二、知识点、JAVA背景介绍、配置JAVA_HOME、跨平台、JVM、JRE、JDKjava学习路程之篇三、知识点、类、模块、项目、操作、下载、安装、IDEA、开发工具jav…

CMake官方教程中文翻译 Step 6: Adding Support for a Testing Dashboard

鉴于自己破烂的英语,所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。 英语好的同学建议直接去看cmake官方文档(英文)学习:地址 点这里 或复制:https://cmake.org/cmake/help/latest/guide/tutorial/index.html …

速过计算机二级python——第二讲:基础语法

第二讲:基础语法 基础语法1. 变量2. 变量命名2.1语法规则2.1.1 区分大小写2.1.2 缩进 4 个空格2.1.3 # 注释 2.2 人机交互1. 输入函数:input()2. 转换函数:eval()3. 输出函数 print() 数据类型String(字符串)数字 组合…

面向对象设计的七大设计原则

在我们探讨如何创建健壮且可维护的面向对象系统时,有一些原则可以为我们提供指导。这些原则可以帮助我们理解如何最好地组织我们的类和对象,以实现高效、模块化和可扩展的设计。在本篇文章中,我们将探讨这些原则,以及如何在我们的…

代码随想录day13 Java版 二叉树部分-遍历全解

1.二叉树的递归遍历 回顾了递归的套路:1.返回值传入参数 2.结束条件 3.写具体的每一个递归单位 而在二叉树的三种遍历都没有返回值,传入当前node节点和所给框架下的返回值数组res 当传入的节点是null时结束递归 每个递归单位包含输出当前节点递归左孩…

centos7安装mysql5.7 或者mysql8

1、centos7安装mysql8 mysql官网 https://dev.mysql.com/downloads/mysql/ 示例2个版本的下载地址 #5.7.30下载地址 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar #8.0.22下载地址 wget https://cdn.mysql.com/archives/mysql-8…

Maya------布尔 圆形圆角组件

17. maya常用命令7.布尔 圆形圆角组件_哔哩哔哩_bilibili 选中一个模型,再按shift加选另外一个模型 圆形圆角命令

OpenStack平台镜像优化

OpenStack平台镜像优化 OpenStack平台镜像优化 案例准备 1. 规划节点 根据云平台分配的主机。节点规划见表1。 表1 节点规划 IP主机名节点192.168.200.11controller控制节点 2. 基础准备 使用云平台分配的All in one作为实验节点,本案例只讲述如何优化通过打…

PVE安装后报错:NO IOMMU Detected解决办法

1、首先在BIOS中确定图形界面卡,打开了VT-D功能。 2、修改grub vim /etc/default/grub 找到:GRUB_CMDLINE_LINUX_DEFAULT"quiet" 然后修改为 GRUB_CMDLINE_LINUX_DEFAULT"quiet intel_iommuon" 3、使用命…

华擎B660 主板 怎么设置打开来电自启功能?

环境: 华擎B660 钢铁传奇 1700 : Intel B660 问题描述: 华擎B660 主板 怎么设置打开来电自启功能? 解决方案: 1.前往-高级- 芯片组配置 2.往下划找到交流 /电源断电恢复 选择电源故障后的电源状态。如果选择 [关机]&#x…

使用MySQL存储过程构建动态SQL查询

一、引言 在开发过程中,根据传递不同的参数查询不同的数据是很常用的需求,一般是在服务端代码实现,但是有时候需要直接对接数据库的时候,没法对参数进行判断和修改对应的SQL,因此需要用到数据库的存储过程,…

mapbox gl 测量

一、代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Measure distances</title> <meta name"viewport" content"initial-scale1,maximum-scale1,user-scalableno"> <link hre…

Typora导出html文件图片自动转换成base64

Typora导出html文件图片自动转换成base64 一、出现问题二、解决方案三、编码实现3.1.创建Java项目3.2.代码3.3.打包成Jar包 四、如何使用endl 一、出现问题 typora 导出 html 的时候必须带有原图片&#xff0c;不方便交流学习&#xff0c;文件太多显得冗余&#xff0c;只有将图…

【vim 学习系列文章 3.2 -- vim 删除 空格】

文章目录 vim 删除行尾空格 vim 删除行尾空格 在代码开发的过程中&#xff0c;经常会遇到行尾有空格的现象&#xff0c;如下&#xff1a; 我们可以在 .vimrc 中通过map 命令来映射删除行尾空格的快捷键&#xff0c;如下&#xff1a; map d<space> :%s/\s*$//g <cr…