k-morozov Asked:2020-10-07 16:29:12 +0000 UTC2020-10-07 16:29:12 +0000 UTC 2020-10-07 16:29:12 +0000 UTC 将参数传递给 bash 正则表达式 772 我用 grep -o '[0-9]\+.[0-9]\+-[^/]\+' 找到像 1.2-stable 这样的文件。现在文件名变了——dev-1.2-stable,这个dev作为参数传递给脚本。试过了 grep -o '$1\+.[0-9]\+.[0-9]\+-[^/]\+' 但它不适合,如何正确将参数写入脚本? linux 2 个回答 Voted Best Answer KoVadim 2020-10-07T17:29:31Z2020-10-07T17:29:31Z 在 bash 中(以及在 Perl 和其他原生语言中),用单引号编写的任何内容都不会被插值(即变量值不会被替换)。要替换它们,您需要使用双引号。 也就是说,写就够了 grep -o "$1\+.[0-9]\+.[0-9]\+-[^/]\+" DiD 2020-10-07T18:28:22Z2020-10-07T18:28:22Z 你的正则表达式是完全错误的。 我猜你想写这样的东西: bash -c "ls -1 | egrep '$1\\d+\\.\\d+-.*\$'" 首先,不带 -E 开关的 grep 仅支持简单正则表达式 (BRE),据我所知,它不包括表示数字的 + 符号。在 BRE 中,您必须通过花括号 {} 指定数字。BRE 有 + 量词。 一般来说,输入数据和预期结果都不是从问题中清楚的。从您的正则表达式中更不清楚您想要得到什么。 此外,您应该指定您想要在参数中传递的确切内容。这将确定参数如何放置在正则表达式中。
在 bash 中(以及在 Perl 和其他原生语言中),用单引号编写的任何内容都不会被插值(即变量值不会被替换)。要替换它们,您需要使用双引号。
也就是说,写就够了
你的正则表达式是完全错误的。
我猜你想写这样的东西:
首先,不带 -E 开关的 grep 仅支持简单正则表达式 (BRE),据我所知,它不包括表示数字的 + 符号。在 BRE 中,您必须通过花括号 {} 指定数字。BRE 有 + 量词。一般来说,输入数据和预期结果都不是从问题中清楚的。从您的正则表达式中更不清楚您想要得到什么。
此外,您应该指定您想要在参数中传递的确切内容。这将确定参数如何放置在正则表达式中。