使用 grep 检查存储在文件中的变量是否未定义或为空

Using grep to check if a variable stored in a file is not undefined or blank

考虑一个名为 .env 的文件,其中包含:

env1=foo
env2=bar

我使用带有正则表达式的 grep 来确认有一行用非空值定义 env2,希望得到匹配项。

~$ grep -c -i '^env2=(?!\s*$).+' .env
0

Returns 0 个匹配...但是为什么呢?我在这里测试同样的东西时得到了匹配:https://regexr.com/6g7of

完整性检查:

~$ grep -c -i '^env2=bar' .env
1

如果我有疑问,请确认是否支持多行。

您的 ^env2=(?!\s*$).+ 正则表达式是符合 PCRE 的正则表达式,但您使用的是 grep 和默认的 POSIX BRE 正则表达式引擎。

如果您使用 GNU grep,您可以使用 -P 选项使 grep 将模式视为 PCRE 正则表达式:

grep -cPi '^env2=(?!\s*$).+' .env

否则,使用 POSIX 兼容模式,`

grep -c -i '^env2=.*[^[:space:]]' .env

此处,正则表达式匹配

  • ^ - 字符串开头
  • env2= - 文字
  • .* - 零个或多个字符
  • [^[:space:]] - 一个 non-whitespace 字符。