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

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

code review!

文章目录

  • [Linux笔记之bash脚本中的符号](#Linux笔记之bash脚本中的符号)
    • [符号和大括号{}结合使用](#符号和大括号{}结合使用)

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

  1. 访问变量的值

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

    bash 复制代码
    name="world"
    echo "Hello, $name"

    输出将会是 Hello, world

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

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

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

    bash 复制代码
    grep "text" file.txt
    if [ $? -eq 0 ]; then
        echo "Text found."
    else
        echo "Text not found."
    fi
  5. 算术扩展
    $((expression)) 用于算术运算。

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

    bash 复制代码
    files=$(ls)
    echo "Files in directory: $files"
  7. 双引号中的变量扩展

    当你在双引号中使用变量时,变量会扩展成它的值。单引号则不会进行扩展。

    bash 复制代码
    greeting="hello"
    echo "$greeting world"
    echo '$greeting world'

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

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

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

  1. 变量扩展

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

    bash 复制代码
    greeting="world"
    echo "Hello, ${greeting}ly"  # 会输出 Hello, worldly

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

  2. 字符串操作

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

    • 子字符串提取

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

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

      bash 复制代码
      filepath="/path/to/your/file"
      echo "${filepath/to/from}"  # 替换第一个匹配的 "to",输出 "/path/from/your/file"
      echo "${filepath//to/from}"  # 替换所有匹配的 "to",输出 "/path/from/your/file"
  3. 数组操作

    大括号也用于访问数组元素和执行数组操作。

    bash 复制代码
    array=(one two three)
    echo "${array[1]}"  # 输出 "two"
  4. 参数扩展的高级用法

    大括号提供了许多高级参数扩展的选项,例如字符串长度、模式匹配等。

    • 字符串长度

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

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

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

相关推荐
我科绝伦(Huanhuan Zhou)几秒前
Linux 系统服务开机自启动指导手册
java·linux·服务器
hunter2062062 小时前
ubuntu终端当一段时间内没有程序运行时,自动关闭终端。
linux·chrome·ubuntu
dal118网工任子仪3 小时前
66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1
笔记·学习
代码讲故事3 小时前
从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题
linux·运维·服务器·windows·远程连接·远程桌面·xrdp
羊小猪~~3 小时前
MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合
数据库·笔记·后端·sql·学习·mysql·考研
milk_yan4 小时前
Docker集成onlyoffice实现预览功能
前端·笔记·docker
东京老树根5 小时前
Excel 技巧15 - 在Excel中抠图头像,换背景色(★★)
笔记·学习·excel
qq_243050795 小时前
irpas:互联网路由协议攻击套件!全参数详细教程!Kali Linux入门教程!黑客渗透测试!
linux·网络·web安全·网络安全·黑客·渗透测试·系统安全
Ronin-Lotus6 小时前
嵌入式硬件篇---ADC模拟-数字转换
笔记·stm32·单片机·嵌入式硬件·学习·低代码·模块测试
IT北辰6 小时前
Linux下 date时间应该与系统的 RTC(硬件时钟)同步
linux·运维·实时音视频