如何在 Bash 循环中使用 `tax[13]-eq-dc` 正则表达式?

boa*_*der 1 bash regex

以下正则表达式tax[13]-eq-dc代表两个服务器:tax1-eq-dc 和tax3-eq-dc。
我试图找到一种在 Bash do 循环中使用它的方法,但不能仅仅获得正确的语法。

例如,下列说法是错误的:

$ for i in tax[13]-eq-dc; do ping -c3 $i; done
ping: unknown host tax[13]-eq-dc
Run Code Online (Sandbox Code Playgroud)

有什么想法正确的语法吗?

Kam*_*ski 6

tax[13]-eq-dc可能看起来像正则表达式,但在您的代码中 Bash 并不将其视为正则表达式。即使确实如此,正则表达式也会匹配某些内容。你想搭配什么?

Bash 将您视为tax[13]-eq-dc文件名扩展(通配)模式。它不是正则表达式,尽管[13]它与[13]正则表达式有些相似。与正则表达式一样,文件名扩展也旨在匹配某些内容;它旨在匹配文件名。

在您当前的工作目录中,没有名称与模式匹配的文件,因此该字符串不会扩展并最终ping作为tax[13]-eq-dc参数。如果您有一个名为tax1-eq-dc或 的文件tax3-eq-dc,则该模式将扩展到一两个单词,扩展到现有文件的所有匹配名称,并且您将运行一两个pings 尝试 pingtax1-eq-dctax3-eq-dc两者。

依赖文件的存在在这里没有任何意义。您很可能不想匹配文件名。您可能需要大括号扩展: tax{1,3}-eq-dc。它扩展为两个单独的单词:tax1-eq-dcand tax3-eq-dc,并且它是纯粹的文本扩展,与文件无关。

文件名扩展是一项可移植功能,而大括号扩展则不是。

for i in tax{1,3}-eq-dc; do ping -c3 "$i"; done
Run Code Online (Sandbox Code Playgroud)