在基于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
然而这不起作用,因为它似乎没有考虑多行。如何匹配变量中的行首?
答案 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