cdlinux097u盘启动-(cdlinuxu盘启动教程)

常见问题 次浏览手机阅读
cdlinux097u盘启动 (cdlinuxu盘启动教程)

本文将介绍方括号及其在命令行中的不同用法。

-- Paul Brown

本文将介绍方括号及其在命令行中的不同用法。

看完 在命令行中使用花括号 之后,让我们继续看看方括号([])在上下文中是如何工作的。

通配

方括号最简单的用法是通配。你可能知道 (Globbing)这个概念以前是通过匹配来匹配的。列出具有相同特征的多个文件是一个非常常见的场景,例如列出所有文件 JPEG 文件:

ls *.jpg

使用 通配符(wildcard)这个过程某一模式的内容都被称为通配。

在上面的例子中,星号(*)就代表“0 一个或多个字符。此外,还有代表只有一个字符的问号()。因此

ls d*k*

可以列出 darkly 和 ducky,而且 dark 和 duck 也可以列出,因为 * 可以匹配 0 个字符。而

ls d*k?

则只能列出 ducky,不会列出 darkly、dark 和 duck。

方括号也可用于通配。为便于演示,可创建测试目录,并在此目录下创建文件:

touch file0{0..9}{0..9}

(如果您不知道上述命令的原理,请查看 另一篇介绍花括号的文章 )

执行上述命令后,就会创建 file000、file001、……、file099 这 100 个文件。

如果要列出这些文件中的第二个数字 7 或 8 可执行的文件:

ls file0[78]?

如果要列出 file022、file027、file028、file052、file057、file058、file092、file097、file可执行098:

ls file0[259][278]

当然,不仅仅是 ls,许多其可用于许多其他命令行工具的通配操作。但在删除文件、移动文件和复制文件的过程中,你需要有一点横向思维。但在删除文件、移动文件和复制文件的过程中,你需要有一点横向思维。

例如将 file010 到 file029 这 30 复制文件 archive010 到 archive029 这 30 副本不能这样执行:

cp file0[12]? archive0[12]?

因为通配只能针对现有文件,而且 archive 开头的文件不存在,不能通配。

而这条命令

cp file0[12]? archive0[1..2][0..9]

因为 cp 不允许将多个文件复制到多个文件中。在复制多个文件时,只能将多个文件复制到指定的目录下:

mkdir archive

cp file0[12]? archive

这个命令可以正常运行,但它只会 30 以相同的名义复制文件 archive/ 目录下,这不是我们想要的。

假如你读过我 关于花括号的文章 ,你可能会记得使用它 % 切断字符串的末尾部分,并使用它 # 切断字符串的开头。

例如:

myvar=\\"Hello World\\"

echo Goodbye Cruel ${myvar#Hello}

就会输出 Goodbye Cruel World,因为 #Hello 将 myvar 在变量中开始 Hello 去掉了。

这个技巧也可以在通配过程中使用。

for i in file0[12]?;\\

do\\

cp $i archive${i#file};\\

done

上述第一行命令告诉我 Bash 路由知识 需要对所有 file01 开头或者 file02 开头,后面只用任何字符的文件操作,第二行的 do 和第四行的 done 这些文件中的命令需要代表执行。

第三行是实际复制操作,在这里使用两次 $i 变量:第一次 cp 命令直接用作源文件的文件名,第二次截取文件名开头 file 部分,然后在开头补上一个 archive,这样:

\\"archive\\" \\"file019\\" - \\"file\\" = \\"archive019\\"

最终整个 cp 命令展开为:

cp file019 archive019

最后,顺便说一一下反斜杠 \\ 其功能是将长命令分成多行,便于阅读。

下一节,我们将了解方括号的更多用法,请注意。

via: 路由网 https://www.linux.com/blog/2019/3/using-square-brackets-bash-part-1

作者: Paul Brown 选题: lujun9972 译者: HankChow 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击了解更多访问文本链接
喜欢 ()