iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何分析Bash中的 {花括号}
  • 155
分享到

如何分析Bash中的 {花括号}

2023-06-16 09:06:34 155人浏览 薄情痞子
摘要

如何分析Bash中的 {花括号},很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在这里,我们先来看看花括号 {}。构造序列花括号在之前的《点的含义》这篇文章中已经

如何分析Bash中的 {花括号},很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在这里,我们先来看看花括号 {}

构造序列

花括号在之前的《点的含义》这篇文章中已经出现过了,当时我们只对点号 . 的用法作了介绍。但在构建一个序列的过程中,同样不可以缺少花括号。

我们使用

echo {0..10}

来顺序输出 0 到 10 这 11 个数。使用

echo {10..0}

可以将这 11 个数倒序输出。更进一步,可以使用

echo {10..0..2}

来跳过其中的奇数。

echo {z..a..2}

则从倒序输出字母表,并跳过其中的第奇数个字母。

以此类推。

还可以将两个序列进行组合:

echo {a..z}{a..z}

这个命令会将从 aa 到 zz 的所有双字母组合依次输出。

这是很有用的。在 Bash 中,定义一个数组的方法是在圆括号 () 中放置各个元素并使用空格隔开,就像这样:

month=("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec")

如果需要获取数组中的元素,就要使用方括号 [] 并在其中填入元素的索引

$ echo ${month[3]} # 数组索引从 0 开始,因此 [3] 对应第 4 个元素Apr

先不要过分关注这里用到的三种括号,我们等下会讲到。

注意,像上面这样,我们可以定义这样一个数组:

letter_combos=({a..z}{a..z})

其中 letter_combos 变量指向的数组依次包含了从 aa 到 zz 的所有双字母组合。

因此,还可以这样定义一个数组:

dec2bin=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})

在这里,dec2bin 变量指向的数组按照升序依次包含了所有 8 位的二进制数,也就是 00000000、00000001、00000010,……,11111111。这个数组可以作为一个十进制数到 8 位二进制数的转换器。例如将十进制数 25 转换为二进制数,可以这样执行:

$ echo ${dec2bin[25]}00011001

对于进制转换,确实还有更好的方法,但这不失为一个有趣的方法。

参数展开

再看回前面的

echo ${month[3]}

在这里,花括号的作用就不是构造序列了,而是用于参数展开parameter expansion。顾名思义,参数展开就是将花括号中的变量展开为这个变量实际的内容。

我们继续使用上面的 month 数组来举例:

month=("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec")

注意,Bash 中的数组索引从 0 开始,因此 3 代表第 4 个元素 "Apr"。因此 echo ${month[3]} 在经过参数展开之后,相当于 echo "Apr"

像上面这样将一个数组展开成它所有的元素,只是参数展开的其中一种用法。另外,还可以通过参数展开的方式读取一个字符串变量,并对其进行处理。

例如对于以下这个变量:

a="Too longgg"

如果执行:

echo ${a%gg}

可以输出 “too long”,也就是去掉了***的两个 g。

在这里,

  • ${...} 告诉 shell 展开花括号里的内容

  • a 就是需要操作的变量

  • % 告诉 shell 需要在展开字符串之后从字符串的末尾去掉某些内容

  • gg 是被去掉的内容

这个特性在转换文件格式的时候会比较有用,我来举个例子:

ImageMagick 是一套可以用于操作图像文件的命令行工具,它有一个 convert 命令。这个 convert 命令的作用是可以为某个格式的图像文件制作一个另一格式的副本。

下面这个命令就是使用 convert 为 JPEG 格式图像 image.jpg 制作一个 PNG 格式的图像副本 image.png

convert image.jpg image.png

在很多 linux 发行版中都预装了 ImageMagick,如果没有预装,一般可以在发行版对应的软件管理器中找到。

继续来看,在对变量进行展开之后,就可以批量执行相类似的操作了:

i=image.jpGConvert $i ${i%jpg}png

这实际上是将变量 i 末尾的 "jpg" 去掉,然后加上 "png",最终将整个命令拼接成 convert image.jpg image.png

如果你觉得并不怎么样,可以想象一下有成百上千个图像文件需要进行这个操作,而仅仅运行:

for i in *.jpg; do convert $i ${i%jpg}png; done

就瞬间完成任务了。

如果需要去掉字符串开头的部分,就要将上面的 % 改成 # 了:

$ a="Hello World!"$ echo Goodbye${a#Hello}Goodbye World!

参数展开还有很多用法,但一般在写脚本的时候才会需要用到。在这个系列以后的文章中就继续提到。

合并输出

最后介绍一个花括号的用法,这个用法很简单,就是可以将多个命令的输出合并在一起。首先看下面这个命令:

echo "I found all these PNGs:"; find . -iname "*.png"; echo "Within this bunch of files:"; ls > PNGs.txt

以分号分隔开的几条命令都会执行,但只有***的 ls 命令的结果输出会被重定向到 PNGs.txt 文件中。如果将这几条命令用花括号包裹起来,就像这样:

{ echo "I found all these PNGs:"; find . -iname "*.png"; echo "Within this bunch of files:"; ls; } > PNGs.txt

执行完毕后,可以看到 PNGs.txt 文件中会包含两次 echo 的内容、find 命令查找到的 PNG 文件以及***的 ls 命令结果。

需要注意的是,花括号与命令之间需要有空格隔开。因为这里的花括号 {} 是作为 shell 中的保留字,shell 会将这两个符号之间的输出内容组合到一起。

另外,各个命令之间要用分号 ; 分隔,否则命令无法正常运行。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何分析Bash中的 {花括号}

本文链接: https://www.lsjlt.com/news/282987.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何分析Bash中的 {花括号}
    如何分析Bash中的 {花括号},很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在这里,我们先来看看花括号 {}。构造序列花括号在之前的《点的含义》这篇文章中已经...
    99+
    2023-06-16
  • linux中Bash如何使用花括号{}
    这篇文章主要为大家展示了“linux中Bash如何使用花括号{}”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中Bash如何使用花括号{}”这篇文章吧。花括号{}的使用通过括号扩展可以...
    99+
    2023-06-27
  • 如何使用编程中花括号
    本篇内容介绍了“如何使用编程中花括号”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,以非块状语言为例所...
    99+
    2024-04-02
  • Bash中的尖括号怎么用
    这篇文章主要介绍Bash中的尖括号怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!通过使用 <,可以实现“欺骗”的效果,让其它命令认为某个命令的输出是一个文件。例如,在进行备份文件的时候不确定备份...
    99+
    2023-06-16
  • 怎么理解Bash中的尖括号
    怎么理解Bash中的尖括号,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。为初学者介绍尖括号。Bash 内置了很多诸如 ls、cd、mv 这样的重要的命令,也有很...
    99+
    2023-06-16
  • vue中花括号数据绑定失败如何解决
    这篇文章将为大家详细讲解有关vue中花括号数据绑定失败如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如下所示:<!DOCTYPE h...
    99+
    2024-04-02
  • Bash 中如何分析 ASP 日志?
    ASP(Active Server Pages)是一种动态网页技术,常用于构建基于 Microsoft Windows 操作系统的 Web 应用程序。在 ASP 应用程序中,日志是一种非常重要的信息来源,可以帮助开发人员和运维人员了解应用...
    99+
    2023-11-06
    日志 windows bash
  • word如何插入括号分支
    本篇内容介绍了“word如何插入括号分支”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-04-07
    word
  • shell编程中如何分析bash变量
    本篇文章为大家展示了shell编程中如何分析bash变量,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。导读shell编程--bash变量介绍 ,变量是计算机内存的单元,其中存放的值可以改变。当&nb...
    99+
    2023-06-05
  • windows中mathtype如何打大括号
    本篇内容主要讲解“windows中mathtype如何打大括号”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows中mathtype如何打大括号”吧! ...
    99+
    2022-12-01
    windows mathtype
  • php中不要省略if后大括号的示例分析
    这篇文章主要为大家展示了“php中不要省略if后大括号的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中不要省略if后大括号的示例分析”这篇文章吧...
    99+
    2024-04-02
  • 如何使用shell中的各种括号
    这篇文章主要讲解了“如何使用shell中的各种括号”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用shell中的各种括号”吧!在这里我想说的是几种shell里的小括号,大括号结构和有括...
    99+
    2023-06-09
  • 如何理解Shell中的中括号用法
    本篇文章给大家分享的是有关如何理解Shell中的中括号用法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。导读在计算机科学中,Shell俗称壳(用来区别于核),是指"为...
    99+
    2023-06-05
  • bash中反引号和$()如何使用
    这篇文章主要介绍了bash中反引号和$()如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇bash中反引号和$()如何使用文章都会有所收获,下面我们一起来看看吧。在bash中,与(反引号)都是用来作命令替...
    99+
    2023-06-28
  • 正则表达式如何分别匹配多个括号中的值
    可以使用正则表达式中的分组来分别匹配多个括号中的值。首先,使用圆括号将要匹配的内容括起来,形成一个分组。例如,要匹配多个小括号中的值...
    99+
    2023-08-18
    正则表达式
  • php中字符串如何去掉括号
    本篇内容主要讲解“php中字符串如何去掉括号”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中字符串如何去掉括号”吧!在PHP中,可以利用“str_replace()”函数去掉字符串中的括号...
    99+
    2023-06-29
  • VUe双中括号属性如何使用
    Vue是一种流行的JavaScript框架,它使用双花括号(“{{”和“}}”)语法来实现属性与视图之间的数据绑定。VUe框架中的模板显示了被框架监控的变量的特定属性,当这些变量的值改变时,这些属性也跟随改变,从而在视图中自动更新相应的值。...
    99+
    2023-05-25
  • Angular中RouterLink花式跳转的示例分析
    小编给大家分享一下Angular中RouterLink花式跳转的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言除了使...
    99+
    2024-04-02
  • php如何去掉字符串两端的中括号
    这篇文章主要介绍了php如何去掉字符串两端的中括号,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php去掉字符串两端中括号的方法:1、使用ltrim()函数去除字符...
    99+
    2023-06-29
  • linux中Bash命令别名的示例分析
    小编给大家分享一下linux中Bash命令别名的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!命令别名在CentOS  6.3系统中我们可以直接...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作