0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Bash shell中使用花括号扩展{..}

CHANBAEK 来源:TIAP 作者:刘光录 2023-01-17 17:37 次阅读

花括号扩展(Brace expansion) {..} 是 Linux 中使用率很高的一个 shell 功能。 你可以使用它打印数字或字母序列,将两个整数或字母使用花括号中的两个点分隔开,然后会看到神奇的结果。

我们举个最简单的例子,看如下代码:

echo {1..10}

上述一行 echo 代码的输出将会是什么呢? 如下:

1 2 3 4 5 6 7 8 9 10

输出结果,会打印在同一行中,中间使用空格隔开。

为了让大家可以更好的理解它的功能,我们接下来列举几个其他例子。

一些例子

假如我们想要得到一个从 7 到 1 的数字序列:

$ echo {7..1}
7 6 5 4 3 2 1

可以添加前缀 0:

$ echo {01..10}
01 02 03 04 05 06 07 08 09 10

可以使用 {x.. y.. z} 形式的花括号来扩展生成从 x 到 y 的值,递增(步长)为 z。 比如我们想要打印 15 以内的偶数序列,如下:

$ echo {0..15..2}
0 2 4 6 8 10 12 14

或者奇数序列:

$ echo {1..15..2}
1 3 5 7 9 11 13 15

步长可以指定为任何数值:

$ echo {100..1000..99}
100 199 298 397 496 595 694 793 892 991

也可以采用负数:

$ echo {3..-4}
3 2 1 0 -1 -2 -3 -4

注意:花括号中的点之间 不能有空格 ,否则,扩展将不起作用。

使用字母序列

我们上面的例子,介绍的是使用数字序列。 但是也可以使用它生成字母序列。 看下面的例子:

$ echo {A..H}
A B C D E F G H

也可以将顺序反过来:

$ echo {H..A}
H G F E D C B A

或者指定步长:

$ echo {H..A..2}
H F D B

或者使用小写字母:

$ echo {a..f}
a b c d e f

实际应用

上面我们介绍了花括号扩展的具体用法,下面来介绍一些关于它的实际应用。

创建一系列文件

我们可以利用花括号扩展来创建一系列具有相同文件名规则的文件,看下面的例子:

$ touch file_{1..10}.txt
$ ls
file_10.txt  file_2.txt  file_4.txt  file_6.txt  file_8.txt
file_1.txt   file_3.txt  file_5.txt  file_7.txt  file_9.txt

创建备份文件

当我们在编辑配置文件时,一般建议先对其进行备份,按照大多数人的习惯,是在原始文件名中添加 .bak 扩展名,这表示它是对原文件的一个备份。

比如:

cp -p long_filename.txt long_filename.txt.bak

现在我们来使用花括号扩展来完成这个工作,如下代码:

cp -p long_filename.txt{,.bak}

是的,这里的 {,text} 不是上面的那种 {X.. Y} 的模式,但是你需要知道有这样一个用法的存在。

$ cp -p long_filename.txt{,.bak}
$ ls
long_filename.txt long_filename.txt.bak

上述 cp 命令的 -p 选项表示需要保留原文件的属性,比如所有权、时间戳等。

使用多个花括号

可以使用多个花括号来创建具有相似名称和不同扩展名的文件,看下面的例子:

$ touch {a,b,c}.{hpp,cpp}
$ ls
a.cpp  a.hpp  b.cpp  b.hpp  c.cpp  c.hpp

在路径中使用或括号扩展

假设有两个路径,其目录结构是类似的,只有很少的一部分不一样(比如中间某个文件夹名称不同),这个时候,花括号扩展会非常有用。 看下面代码:

mv project/{new,old}/dir/file

其相当于:

mv project/new/dir/file project/old/dir/file

并非所有内容都可扩展

这是不言而喻的。 如果你希望创建一个序列,给出的条件应该是可以创建成序列的东西。 如果你使用的是一个很奇怪的组合,将不能被扩展。 比如:

$ echo {1..Z}
{1..Z}

另外,也不能使用小数:

$ echo {1..5..0.5}
{1..5..0.5}

一些奇怪的组合,也会生成奇怪的结果:

$ echo {a..F}
a ` _ ^ ]  [ Z Y X W V U T S R Q P O N M L K J I H G F

当你刚开始接触花括号扩展时,会觉得它很麻烦。 但是,手动打字会更耗费时间。 一旦你熟悉了它,那你的 Linux 技能会更上一个台阶。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206737
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66772
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22903
收藏 人收藏

    评论

    相关推荐

    【RT-Thread学习笔记】bash shell -e参数

    bash shell -e参数的含义与用途,你了解吗?
    的头像 发表于 07-28 05:20 1477次阅读
    【RT-Thread学习笔记】<b class='flag-5'>bash</b> <b class='flag-5'>shell</b> -e参数

    何在bash shell脚本中使用变量

    如果你使用编程语言编写过程序,那么一定接触过变量。而在 bash 脚本的编写时,变量也是一个很重要的概念。今天我们分享一下如何在 bash 脚本中使用变量。
    发表于 12-02 16:32 1670次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b> <b class='flag-5'>shell</b>脚本<b class='flag-5'>中使</b>用变量

    何在bash脚本中创建第一个数组

    在前面的文章中,我们介绍了如何在 bash 中使用有限数量的变量,比如要保存一个或两个文件名或用户名。
    发表于 12-02 16:53 708次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b>脚本中创建第一个数组

    何在bash中使用条件语句

    今天我们介绍一下如何在 bash 中使用条件语句。
    的头像 发表于 12-09 17:27 1855次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b><b class='flag-5'>中使</b>用条件语句

    shell中的各种括号的使用方法 linux基础学习

    Linux中小括号()和大括号{}都是对其中的一串命令进行执行,但有一定的区别,其具体含义如下:( ):括号内的命令会在一个子shell中执行(( )):将
    发表于 01-16 14:21

    Linux Shell系列教程之Shell变量

    符号($)即可,如:your_name="chuangkexueyuan"echo $your_nameecho ${your_name}变量名外面的括号是可选的,加不加都行,加
    发表于 08-28 14:14

    如何更新Vivado 2014.2中的bash shell版本?

    如何更新Vivado 2014.2中的bash shell版本?谢谢!
    发表于 03-20 07:47

    在ucosiii编译时出现括号的问题是 什么原因?

    编译的时候出现这种错误,括号出现问题。void函数下面的括号也出现问题,请问是什么原因?
    发表于 05-11 23:57

    如何入门shell脚本

    一般地,shell脚本必须以#!/bin/bash开头读取并打印的例子#!/bin/bashread -p "Input your name and age: " name
    发表于 12-23 08:24

    【RT-Thread学习笔记】bash和dash-shell

    ​ 最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash shell来解析,而通常我们默认用的是bash shell来解析;我按
    的头像 发表于 07-30 13:49 977次阅读
    【RT-Thread学习笔记】<b class='flag-5'>bash</b>和dash-<b class='flag-5'>shell</b>

    何在bash shell脚本中接受参数

    终端命令通常包含一些参数,在使用的时候可以提供不同的参数来确定命令的执行方式。POSIX规范中包含了用于命令行接口的选项。这也是与最早的UNIX应用程序建立的一个由来已久的约定,所以当你在写bash脚本的时候,需要知道如何在脚本中接受参数。
    的头像 发表于 12-09 17:34 2275次阅读

    每个Linux用户都需要知道的重要Bash shell变量

    Bash 是大多数 Linux 发行版的默认 shell。以下是每个 Linux 用户都需要知道的一些重要的 Bash shell 变量。
    的头像 发表于 02-13 09:22 633次阅读

    BASH shell脚本篇—条件命令

    这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。
    的头像 发表于 10-11 15:21 318次阅读
    <b class='flag-5'>BASH</b> <b class='flag-5'>shell</b>脚本篇—条件命令

    BASH shell脚本篇—函数

    函数是代码重用的最重要方式。Bash函数可以定义为一组命令,在bash脚本中多次调用。
    的头像 发表于 10-20 16:31 353次阅读

    BASH shell脚本篇—文件处理介绍

    Bash Shell脚本中,可以使用多种方法来对文件进行操作,包括读取文件或写入文件。
    的头像 发表于 10-23 16:51 297次阅读