在bash-if语句中使用通配符

在bash-if语句中使用通配符,bash,shell,sh,Bash,Shell,Sh,我在bashshell中编写了以下代码。 它应该接受位置参数,如果它以破折号“-”开头,则应该输入错误消息 但是由于某些原因,if语句总是被跳过。它只有在我按字面输入时才起作用-* 我得到的印象是,修复与“$”有关 以下是代码片段: EXECNAME=$1 if [ "$EXECNAME" = "-*" ]; then echo "error: invalid executable name" fi 您可以使用双方括号[[和],而无需在匹配模式上使

我在bashshell中编写了以下代码。 它应该接受位置参数,如果它以破折号“-”开头,则应该输入错误消息

但是由于某些原因,if语句总是被跳过。它只有在我按字面输入时才起作用-*

我得到的印象是,修复与“$”有关

以下是代码片段:

    EXECNAME=$1
    if [ "$EXECNAME" = "-*" ]; then
           echo "error: invalid executable name"
    fi

您可以使用双方括号
[[
]
,而无需在匹配模式上使用引号,即可在BASH中获得glob支持:

[[ "$EXECNAME" = -* ]] && echo "error: invalid executable name"

为了与glob模式匹配,我更喜欢使用
case

case $EXECNAME in
  -*) echo "error: invalid executable name"
esac