Linux笔记之bash脚本中的$符号

Linux笔记之bash脚本中的$符号

code review!

文章目录

  • Linux笔记之bash脚本中的$符号
    • $符号和大括号{}结合使用

在 Bash 脚本中,`$` 符号被用于许多不同的上下文中,主要用于访问变量的值、参数扩展、算术运算以及命令替换等:

  1. 访问变量的值
    当你在变量名前面加上 $ 符号时,它会被替换成该变量的值。

    name="world"
    echo "Hello, $name"
    

    输出将会是 Hello, world

  2. 位置参数
    $0 代表脚本的名字,$1$9 代表第一到第九个参数,$# 代表参数的个数。

    echo "Script name: $0"
    echo "First argument: $1"
    echo "Number of arguments: $#"
    
  3. 特殊参数

    • $*$@ 都代表所有的位置参数,但是在引号中有所不同。
    • "$*" 将所有的位置参数当作一个单一的字符串。
    • "$@" 会将每个参数当作独立的带引号的字符串。
  4. 退出状态
    $? 代表上一个命令的退出状态(返回值)。0 通常意味着成功,其他值意味着有错误或问题。

    grep "text" file.txt
    if [ $? -eq 0 ]; thenecho "Text found."
    elseecho "Text not found."
    fi
    
  5. 算术扩展
    $((expression)) 用于算术运算。

    num1=5
    num2=3
    sum=$((num1 + num2))
    echo $sum  # 输出 8
    
  6. 命令替换
    $(command) 用于命令替换,它执行命令并将输出用作其他命令或变量的值。

    files=$(ls)
    echo "Files in directory: $files"
    
  7. 双引号中的变量扩展
    当你在双引号中使用变量时,变量会扩展成它的值。单引号则不会进行扩展。

    greeting="hello"
    echo "$greeting world"
    echo '$greeting world'
    

    第一个 echo 命令会输出 hello world,而第二个则会输出字面上的 $greeting world

$符号和大括号{}结合使用

在 Bash 脚本中,$ 符号可以与大括号 {} 结合使用,这种结合使用有几个好处和用途:

  1. 变量扩展
    大括号用于明确变量的边界。这在变量名可能与紧跟其后的字符混淆时非常有用。

    greeting="world"
    echo "Hello, ${greeting}ly"  # 会输出 Hello, worldly
    

    如果没有大括号,Bash 会尝试查找名为 greetingly 的变量,这很可能不是你想要的。

  2. 字符串操作
    大括号还可以用于对变量进行各种字符串操作,如提取子字符串、查找和替换等。

    • 子字符串提取

      str="abcdefghijk"
      echo "${str:3:4}"  # 从索引3开始提取长度为4的子字符串,输出 "defg"
      
    • 默认值

      echo "${unset_var:-default_value}"  # 如果变量 unset_var 没有设置,输出 "default_value"
      
    • 替换

      filepath="/path/to/your/file"
      echo "${filepath/to/from}"  # 替换第一个匹配的 "to",输出 "/path/from/your/file"
      echo "${filepath//to/from}"  # 替换所有匹配的 "to",输出 "/path/from/your/file"
      
  3. 数组操作
    大括号也用于访问数组元素和执行数组操作。

    array=(one two three)
    echo "${array[1]}"  # 输出 "two"
    
  4. 参数扩展的高级用法
    大括号提供了许多高级参数扩展的选项,例如字符串长度、模式匹配等。

    • 字符串长度

      mystring="hello world"
      echo "${#mystring}"  # 输出字符串长度 "11"
      
    • 模式删除

      filename="myfile.txt"
      echo "${filename%.*}"  # 删除最短匹配 . 及其后面的内容,输出 "myfile"
      echo "${filename%%.*}"  # 删除最长匹配 . 及其后面的内容,输出 "myfile"
      

大括号的使用增加了代码的可读性和灵活性,可以帮助你更精确地控制变量的行为和输出。

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

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

相关文章

【论文笔记】GS++: Error Analyzing and Optimal Gaussian Splatting

原文链接:https://browse.arxiv.org/abs/2402.00752 1. 引言 许多基于3D高斯溅射(3D-GS)的方法针对稀疏视图场景的鲁棒性、性能和存储效率进行增强,但没有专门处理高斯投影的误差。 3D-GS以一组图像和相机通过SfM校准产生的点云…

LabVIEW电能质量监测系统

LabVIEW电能质量监测系统 随着全球能源需求的增加以及能源危机的加剧,对电能的有效利用和质量监控变得越来越重要。特别是在电力系统中,电能质量的监测对于保证电力设备的稳定运行和提高能源利用效率具有重要意义。采用LabVIEW软件开发了一套高效的电能…

使用PHPStudy搭建Cloudreve网盘服务

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

充电桩项目实战:短信功能 分布式限流

你好,我是田哥 最近,我在对充电桩项目进行微服务升级中,肯定会遇到一些问题 前面分享了:充电桩项目实战:搞定多数据源! 题外话:如果想年后找到更好的工作,推荐看这篇文章&#xff1a…

高端酒店宴会包间桌位预定小程序h5开源版开发

高端酒店宴会包间桌位预定小程序h5开源版开发 餐厅预定桌位系统,支持多店切换预约,提供全部前后台无加密源代码和数据库 功能特性 为你介绍餐厅预订系统的功能特性 多端适配 采用uniapp,目前适配小程序和微信H5 多店铺 支持多店铺预定 付费和免费预定 支…

介绍 HTTPS 中间人攻击

介绍 HTTPS 中间人攻击 https协议是由httpssl协议构成的。 客户端和服务端SSL或TLS能够相互通信的基本步骤 确定使用协议的版本 选择加密算法 通过交换和验证数字证书彼此进行身份验证 使用非对称加密技术生成共享密钥,避免密钥分发问题。 SSL或TLS使用共享密钥对消…

软件包模块、服务模块、逻辑卷模块、文件系统模块、playbook剧本,YAML语法规范、playbook剧本案例

ansible ansible模块 yum_repository 用于配置yum 常用选项: file: 指定文件名其他选项,请与文件内容对照 # 在webservers组中的主机上,配置yum[rootpubserver ansible]# ansible webservers -m yum_repository -a "file…

请解释Java中的equals()和hashCode()方法的作用和区别。请解释Java中的AOP(面向切面编程)的作用和原理。

请解释Java中的equals()和hashCode()方法的作用和区别。 在Java中,equals()和hashCode()方法都是用于处理对象相等性(equality)的方法。 equals()方法: equals()方法是Object类中定义的方法,所有的Java类都可以使用该…

vscode连接ssh失败记录(20240202)

问题描述: 1、在使用vscode remote-ssh插件时连接较老版本linux时,出现报错Warning: Missing GLIBC > 2.28! from /lib/x86_64-linux-gnu/libc-2.27.so Error: Missing required dependencies. Please refer to our FAQ https://aka.ms/vscode-rem…

算法随想录第五十天打卡123.买卖股票的最佳时机III , 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。 视频讲解:动态规划,股票至多买卖两次,怎么求? | …

『运维备忘录』之 Systemd 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

什么是 Java 中的 IO 和 NIO?它们之间有什么区别?什么是 Java 中的内存管理和垃圾回收?常见的垃圾回收算法有哪些?

什么是 Java 中的 IO 和 NIO?它们之间有什么区别? 在 Java 中,IO(Input/Output)和NIO(New IO)都是用于处理输入输出操作的API。它们之间有以下区别: IO(传统IO&#xff…

11月最新版付费进群源码自动定位+开源

Nginx 1.22.1 php5.6 mysql5.6 数据库配置&#xff1a;/config/database.php 配置后台域名&#xff1a;config/extra/ip.php 设置伪静态thinkphp 后台账号88886666 密码12345 代码结构 关键代码剖析 <?php // ----------------------------------------------------…

continue语句

一、continue语句 1、continue语句介绍 2、continue语句流程图 3、快速入门案例 4、continue语句的标签

毫米波雷达在汽车领域的原理、优势和未来趋势

1 毫米波雷达的原理 汽车引入毫米波雷达最初主要是为了实现盲点监测和定距巡航。毫米波实质上是电磁波&#xff0c;其频段位于无线电和可见光、红外线之间&#xff0c;频率范围为10GHz-200GHz。工作原理类似一般雷达&#xff0c;通过发射无线电波并接收回波&#xff0c;利用障…

LeetCode 每日一题 2024/1/29-2024/2/4

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/29 514. 自由之路1/30 2808. 使循环数组所有元素相等的最少秒数1/31 2670. 找出不同元素数目差数组2/1 LCP 24. 数字游戏2/2 1686. 石子游戏 VI2/3 1690. 石子游戏 VII2/…

理论与实战:一篇看懂Python词云

实现原理 导入一篇txt文档&#xff0c;使用jieba库对文档中的文字进行分词&#xff0c;计算各个词汇出现的频率&#xff0c;使用wordcloud库按照词汇频率的大小生成词云。 注意&#xff0c;不是使用wordcloud.generate()&#xff0c;这个方法没有按照词汇频率的方式实现词云 停…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

Linux常见面试题汇总

Linux上如何查询某个端口是否被占用&#xff1f; 在Linux上&#xff0c;你可以使用以下几种方法来查询某个端口是否被占用&#xff1a; 使用netstat命令&#xff1a; netstat -tuln | grep <端口号>这个命令会列出当前正在运行的所有TCP和UDP端口&#xff0c;并过滤出指…

极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁

文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说&#xff0c;代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示&#xff0c;他可能因服务器运营费用而面临破产。据他透…