如果'grep'不返回任何内容,则分配给变量的内容是什么?

时间:2019-03-05 14:58:01

标签: bash grep

我想检查对象是否存在以及是否已经存在,所以我想在重新创建对象之前删除该对象。

在构建过程中,我需要使用它来处理android模拟器,但似乎如果找不到任何内容,就无法将'grep'的结果赋给变量...?

这是我的示例(不起作用):

echo "# --> use avdmanager"

# delete existing avd if available
test_avd=$(android list avd | grep test)
if [ ! -z $test_avd ]
  then
    echo "# --> delete old avd"
    avdmanager delete avd -n "test"
fi

# create new avd

如果 grep 找不到任何错误,脚本将在test_avd=$(.....)之后停止。 即使我在test_avd="$(...)"周围加上一些引号,也是如此......:(

此版本工作正常,但我真的不知道为什么。也许有人在那里有什么建议?

echo "# --> use avdmanager"

# delete existing avd if available
if [ ! -z "$(avdmanager list avd | grep test)" ] 
  then
    echo "# --> delete old avd"
    avdmanager delete avd -n "test"
fi

# create new avd

1 个答案:

答案 0 :(得分:1)

如果grep不返回任何内容,则$test_avd变量将为空。但是这里不需要变量。

代替此:

test_avd=$(android list avd | grep test)
if [ ! -z $test_avd ]

使用此:

if android list avd | grep -q test

注意:当需要变量 时,! -z也是不必要的; [ "$test_avd" ]返回与[ ! -z $test_avd ]完全相同的结果。