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

Shell脚本编程之大括号扩展

        在 Shell 中,大括号扩展(Brace Expansion),通常也被称为"花括号扩展",是一种非常有用的功能,用于生成一系列字符串或文件名。它允许用户通过简短的语法快速生成多个相似的字符串或路径。这种功能在批量创建文件、生成序列数据或简化命令输入时非常方便。可以帮助我们简化代码、提高效率。

注意:①、空格敏感性:大括号内部不能有空格,否则会导致错误。

        ②、未匹配时不扩展:如果大括号内没有有效的模式,原样输出。

        ③、与通配符的区别:大括号扩展与通配符(如 *、?)不同,它是静态的,不依赖于文件系统中的实际文件。

0、大括号扩展基本语法

大括号扩展的基本形式是: {<元素1>,<元素2>,...,<元素N>}

(1)、大括号 {} 内部包含一个逗号分隔的列表;

(2)、每个元素可以是字符串、数字或其他字符;

(3)、大括号外部的内容会被复制并与每个元素组合。

1、字符(串)扩展

①、显示字符(串)

字符和字符串之间,使用逗号分隔开

格式:{字符1,字符2,字符3,... ,字符n}

           {字符串1,字符串2,字符串3,...,字符串n}

echo {b,a,a,h,i}
echo {Yesterday,Today,Tomorrow}
#输出结果
b a a h i
Yesterday Today Tomorrow

②、字母序列扩展

字符范围扩展格式:{<起始字符>..<结束字符>}

echo letter-{a..e}
#输出结果
letter-a letter-b letter-c letter-d letter-e

③、倒序字母序列

字符范围扩展格式:{<起始字符>..<结束字符>}

echo letter-{z..v}
#输出结果
letter-z letter-y letter-x letter-w letter-v

2、数字扩展

①、显示数字

数字和数字之间,使用逗号分隔开

格式:{数字1,数字2,数字3,...,数字n}

echo {1,8,6,4,4,4,1}
#输出结果
1 8 6 4 4 4 1

②、生成数字序列

格式: {<起始数字>..<结束数字>}

echo number-{1..5}
#输出结果
number-1 number-2 number-3 number-4 number-5

③、生成倒序数字序列

格式: {<起始数字>..<结束数字>}

echo number-{5..1}
#输出结果
number-5 number-4 number-3 number-2 number-1

④、指定步长

从 Bash 4.0 开始,支持指定步长,格式为:

{<起始值>..<结束值>..<步长>}

echo number-{1..10..2}
#输出结果
number-1 number-3 number-5 number-7 number-9

3、嵌套大括号扩展

        大括号扩展可以嵌套使用,从而生成更复杂的组合。

①、变量扩展

可以使用大括号对变量中的部分内容进行替换。

格式:${变量名/模式/替换值}

  • 替换变量值中第一个匹配的模式
  • 如果需要全局替换,可以使用 //
#1、字符串提取
name="牛马大师兄"
echo "Hello, ${name}!"
#输出结果
Hello, 牛马大师兄!

#2、字符串替换
path="/usr/local/bin"
echo "${path/usr/home}"
#输出结果
/home/local/bin  #第一个usr替换为home

path="/usr/local/bin:/usr/bin"
echo "${path//usr/home}"
#输出结果
/home/local/bin:/home/bin  #全部usr替换为home

②、多重扩展

echo {A,B}{1..3}
#输出结果
A1 A2 A3 B1 B2 B3

 ③、数组扩展

array=("Python" "C++" "Java"); echo "${array[@]}"; echo "${array[*]}"
#输出结果
Python C++ Java
Python C++ Java

④、删除变量前缀后缀

        通过"#"和"%"可以删除变量值的前缀或后缀部分。

格式:

删除最短匹配前缀

${变量名#模式}

删除最长匹配前缀

${变量名##模式}

删除最短匹配后缀

${变量名%模式}

删除最长匹配后缀

${变量名%%模式}

#删除前缀
file="project/src/main.c"
echo "${file#project/}"
#输出结果:
src/main.c

删除最长前缀:
file="project/src/main.c"
echo "${file##*/}"
#输出结果:
main.c

#删除后缀
file="project/src/main.c"
echo "${file%.c}"
#输出结果:
project/src/main

删除最长后缀:
file="project/src/main.c.bak"
echo "${file%%.*}"
#输出结果:
project/src/main

4、多命令组合使用

①、批量创建文件

touch file-{1..5}.txt

#创建的文件
file-1.txt 
file-2.txt 
file-3.txt 
file-4.txt 
file-5.txt

②、批量创建目录

mkdir -p project/{src,inc,lib,build}

#创建的目录
project/src
project/inc
project/lib
project/build

http://www.dtcms.com/a/109239.html

相关文章:

  • Spring 核心技术解析【纯干货版】- XX:Spring 测试模块 Spring-Test 模块精讲
  • 【文献研究】铝对热冲压加热过程中锌氧化的影响
  • 【C++ SIMD】第3篇:数据对齐与跨步访问(Windows/VS2022版)——以AVX为例
  • Hadoop集群---运维管理和技巧
  • 【Kafka基础】单机安装与配置指南,从零搭建环境
  • NodeJS--NPM介绍使用
  • 训练或微调以生成新组合结构
  • Leetcode 927 -- 思维
  • Win10定时任务计划无法显示要执行的EXE任务程序界面,问题解决办法
  • 什么是检索增强生成(RAG)
  • 7-3 逆序的三位数
  • PyTorch 深度学习实战(33):联邦学习与隐私保护
  • CROSS JOIN第一个表中的每一行与第二个表中的每一行组合
  • 商城系统:电商时代的核心驱动力
  • Cribl 修改字段rename
  • Express学习笔记(四)——同源和跨域详解
  • (九)图形管线
  • Vue3.5 企业级管理系统实战(十三):TagsView标签栏导航
  • PyQt6实例_A股日数据维护工具_权息数据增量更新线程
  • 禹神:三小时快速上手TypeScript,TS速通教程(上篇、中篇、下篇,装饰器),根据视频整理
  • Windows查重工具,强烈推荐大家收藏!
  • 前端接收客户端返回的token值使用pinia持久化保存token
  • 元素定位-xpath
  • verl单机多卡与多机多卡使用经验总结
  • MCP的基本组成部分有哪些?MCP Servers服务器起到什么作用?
  • Jetpack Compose 状态管理指南:从基础到高级实践
  • 机器学习算法分类全景解析:从理论到工业实践(2025新版)
  • Electron读取本地Json文件(Win、Mac)
  • JSVMP逆向实战:原理分析与破解思路详解
  • day21 学习笔记