Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode Shell脚本中的正则表达式比较_Xcode_Bash_Shell - Fatal编程技术网

Xcode Shell脚本中的正则表达式比较

Xcode Shell脚本中的正则表达式比较,xcode,bash,shell,Xcode,Bash,Shell,在Xcode 8中,我有一个运行脚本,它将字符串与正则表达式进行比较: if [ "$MOBILE_BUNDLE_IDENTIFIER" =~ ".+(Debug)" ] then RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Debug elif [ "$MOBILE_BUNDLE_IDENTIFIER" =~ ".+(Test)" ] then RESOURCE_PATH=${SRCROOT}/Resources/Clients/C

在Xcode 8中,我有一个运行脚本,它将字符串与正则表达式进行比较:

if [ "$MOBILE_BUNDLE_IDENTIFIER" =~ ".+(Debug)" ]
then
RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Debug
elif [ "$MOBILE_BUNDLE_IDENTIFIER" =~ ".+(Test)" ]
then
RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Production
elif [ "$MOBILE_BUNDLE_IDENTIFIER" =~ ".+(ProductionTest)" ]
then
RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Test
else
RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Store
fi
变量
$MOBILE\u BUNDLE\u IDENTIFIER
将是以下之一:

com.cnt.Filer
com.cnt.Filer.ProductionTest
com.cnt.Filer.Debug
com.cnt.Filer.Test
当我运行此命令时,会出现以下错误:

line 4: [: =~: binary operator expected
line 7: [: =~: binary operator expected
line 10: [: =~: binary operator expected
在完整的脚本中,第4、7和10行是then语句

有人知道我如何成功地将变量与正则表达式进行比较吗

  • 对于BASH中的正则表达式,应该使用
    [[string=~regex]]
  • 不要引用正则表达式
  • 看起来您甚至不需要正则表达式,只需使用
    =
  • 您的脚本可以如下所示:

    if [[ $MOBILE_BUNDLE_IDENTIFIER == *Debug* ]]; then
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Debug
    elif [[ $MOBILE_BUNDLE_IDENTIFIER == *Test* ]]; then
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Production
    elif [[ $MOBILE_BUNDLE_IDENTIFIER == *ProductionTest* ]]; then
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Test
    else
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Store
    fi
    

    <强> ps:< /强>您也可以考虑使用<代码>案例< /代码>

    case "$MOBILE_BUNDLE_IDENTIFIER" in
    *Debug*)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Debug
       ;;
    *Test*)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Production
       ;;
    *ProductionTest*)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Test
       ;;
    *)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Store
       ;;
    esac
    
  • 对于BASH中的正则表达式,应该使用
    [[string=~regex]]
  • 不要引用正则表达式
  • 看起来您甚至不需要正则表达式,只需使用
    =
  • 您的脚本可以如下所示:

    if [[ $MOBILE_BUNDLE_IDENTIFIER == *Debug* ]]; then
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Debug
    elif [[ $MOBILE_BUNDLE_IDENTIFIER == *Test* ]]; then
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Production
    elif [[ $MOBILE_BUNDLE_IDENTIFIER == *ProductionTest* ]]; then
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Test
    else
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Store
    fi
    

    <强> ps:< /强>您也可以考虑使用<代码>案例< /代码>

    case "$MOBILE_BUNDLE_IDENTIFIER" in
    *Debug*)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Debug
       ;;
    *Test*)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Production
       ;;
    *ProductionTest*)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Test
       ;;
    *)
       RESOURCE_PATH=${SRCROOT}/Resources/Clients/Cnt/Files/Store
       ;;
    esac
    

    单一的
    [
    是旧的shell内置,也称为
    测试
    。它不用于文本模式匹配(既不用于RE也不用于globbing),只用于有限的文件扩展。单一的
    [
    是旧的shell内置,也称为
    测试
    。它不用于文本模式匹配(既不用于RE也不用于globbing),仅限有限的文件名扩展。