金枪哥喷剂官网
9958874
9958874
原标题:在 Bash Shell 中使用神奇的花括号
花括号扩展 {..} 是 Linux 中最未被充分利用但又非常棒的 Shell 特性之一。
你可以用它来打印数字和字母序列。添加两个整数或用花括号中的两点分隔的字母,然后看看它的神奇之处。
举个最简单的例子:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{1..10}你能猜到输出吗?
示例如下:
12 3 4 5 6 7 8 9 10输出序列打印在同一行中,它们之间有空格。
我再举几个花括号扩展的例子以便你们更好地理解它的作用。
花括号扩展示例
假设你想要得到一个从 7 到 1 的逆序列。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{7..1}7 6 5 4 3 2 1您可以添加前导零:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{01..10}01 02 03 04 05 06 07 08 09 10你可以用{x..y..z}生成从 x 到 y 的值,同时增加 z。
假设你想要一个直到 15 的偶数序列。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{0..15..2}0 2 4 6 8 10 12 14或者得到一个奇数序列:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{1..15..2}1 3 5 7 9 11 13 15你可以采取任何渐进的步骤:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{100..1000..99}100 199 298 397 496 595 694 793 892 991它也可以是负数:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{3..-4}3 2 1 0 -1 -2 -3 -4大括号中的点之间不能有空格。否则,扩展将无法工作。
使用字母顺序
到目前为止,我只使用了数字序列。但是你也可以用它来生成字母序列。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{A..H}A B C D E F G H你也可以反过来:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{H..A}H G F E D C B A或者进入递增或递减步骤:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{H..A..2}{H..A..2}您也可以使用相同的小写字母:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{a..f}a b c d e f花括号扩展的实际应用
前文我们展示了在 bash shell 中使用花括号扩展创建序列的示例。
但它们不是实际的例子。你可以把它用到一些实际的好用途。让我分享几个这样的例子。
创建具有相似名称的多个文件
创建具有特定名称模式的文件:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$touch linuxmi_{1..10}.txt┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$lslinuxmilinuxmi_2.txt linuxmi_5.txt linuxmi_8.txtlinuxmi_10.txtlinuxmi_3.txt linuxmi_6.txt linuxmi_9.txtlinuxmi_1.txtlinuxmi_4.txt linuxmi_7.txt www.linuxmi.com创建备份文件
当您要编辑配置文件时,建议进行备份。一般惯例是在原始文件名中添加.bak扩展名。这表示它是给定文件名的备份。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$ cp -p linuxmi_1.txt linuxmi_1.txt.bak很酷吧,现在让我们使用花括号扩展:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$ cp -p linuxmi_2.txt{,.bak}是的!这个{,text}不是通常的 {X..Y} 模式,但您应该知道它是一个有用的模式。
cp 命令的 -p 选项保留文件属性,如所有权、时间戳等。
使用多个花括号
可以使用多个花括号来创建具有相似名称和不同扩展名的文件。这只是使用多个花括号的一个例子。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$ touch {a,b,c}.{hpp,cpp}┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$ lsa.cpp a.hpp b.cpp b.hppc.cppc.hpp在路径中使用花括号扩展
假设您有一个类似的目录结构,只需稍作更改。花括号扩展在这里很有用。
mv project/{new,old}/dir/file上述命令相当于:
mv project/new/dir/file project/old/dir/file不是所有的东西都可以使用扩展
那是不用说的。你想要创造序列,所以它应该是可以被创造成序列的东西。如果你使用一个奇怪的组合,它就不可以使用扩展。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{1..Z} 1 ⨯1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z不能使用小数点。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$echo{1..5..0.5}{1..5..0.5}对于一些奇怪的组合,它可能会产生奇怪的结果:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]└─$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 命令技能提升到另一个水平。
所以,尽量在 shell 脚本中使用花括号扩展。
需要最新 Ubuntu 22.10 精美艺术壁纸的朋友请加小编微信 linuxgs (口令Ubuntu壁纸)。
来自:Linux迷
链接:https://www.linuxmi.com/bash-shell-brace-expansion.html
关注我们
Linux公社
关注 Linux公社,添加星标
每天 获取 技术干货,让我们一起成长
合作联系:root@linuxidc.net返回搜狐,查看更多
责任编辑:
打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!