字符串比较中的Bash通配符

4

前几天我在处理一个if语句时遇到了问题。结果发现我的变量开头有一个空格。因此,我尝试使用以下代码解决问题,但没有成功。

if [ "$COMMAND_WAIT" == "*REBOOT" ]; then
sudo /etc/kca/scripts/reboot.sh
echo "REBOOTING"
fi

我应该能够使用通配符来处理此语句,还是有其他方法可以解决这个问题?
1个回答

5
以下代码应该可行。它使用 [[ 替代 [,并且在 pattern 周围没有引号。
if [[ "$COMMAND_WAIT" == *REBOOT ]]; then
    sudo /etc/kca/scripts/reboot.sh
    echo "REBOOTING"
fi

[[ expression ]]是一个复合表达式,其扩展和引用具有特殊规则。相比之下,[是一个内置命令,即*REBOOT将被扩展为路径名。在大多数情况下,使用[[而不是[更容易。


太棒了,完美运作!使用[[ ~ ]]有什么不同? - Matt Leyland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接