if子句中的正则表达式多行输出变量

时间:2014-08-27 13:17:12

标签: bash

在基于debian的系统上考虑以下内容:

VAR=$(dpkg --get-selections | awk '{print $1}' | grep linux-image)

这将在我的系统上打印一个已安装包的列表,其中包含字符串“linux-image”,此输出如下所示:

linux-image-3.11.0-17-generic
linux-image-extra-3.11.0-17-generic
linux-image-generic

现在众所周知

echo $VAR

结果

linux-image-3.11.0-17-generic linux-image-extra-3.11.0-17-generic linux-image-generic

echo "$VAR"

结果

linux-image-3.11.0-17-generic
linux-image-extra-3.11.0-17-generic
linux-image-generic

我不想在if子句中使用外部命令,它看起来相当脏而且不是很优雅,所以我想使用内置正则表达式匹配的bash:

if [[ "$VAR" =~ ^linux-image-g ]]; then
   echo "yes"
fi

然而这不起作用,因为它似乎没有考虑多行。如何匹配变量中的行首?

1 个答案:

答案 0 :(得分:3)

使用外部命令作为if语句的一部分没有任何问题;我会完全跳过VAR变量并使用

if dpkg --get-selections | awk '{print $1}' | grep -q linux-image;

-q的{​​{1}}选项会抑制其输出,而grep语句会直接使用if的退出状态。您也可以直接在grep脚本中删除grep并测试$1

awk

或者您可以跳过if dpkg --get-selections | awk '$1 =~ "^linux-image" { exit 0; } END {exit 1}'; then ,因为在调用awk之前似乎没有真正需要删除其他字段:

grep