【问题标题】:Find substring in shell script variable在 shell 脚本变量中查找子字符串
【发布时间】:2011-10-13 00:02:56
【问题描述】:

我有一个字符串

$VAR="I-UAT"; 

在我的 shell 脚本代码中。我需要一个条件语句来检查该字符串中是否存在"UAT"

我应该使用什么命令来获取 true 或 false boolean 作为输出? 或者有没有其他方法可以检查?

【问题讨论】:

    标签: bash shell scripting substring


    【解决方案1】:

    什么外壳?使用 bash:

    if [[ "$VAR" =~ "UAT" ]]; then
        echo "matched"
    else
        echo "didn't match"
    fi
    

    【讨论】:

    • 另外,仅限 bash,[[ "$VAR" = *UAT* ]] -- 右侧必须不加引号以进行模式匹配。
    • 很确定这是一个仅限 bash 的功能。你的 /bin/sh 是 bash 的符号链接吗?
    • 投票 -1 因为这个答案是特定于 bash 的,而基于 case 的解决方案将适用于任何 POSIX shell。
    • @adl - 我想我理解那里的逻辑,但显然 OP 正在使用 bash 否则我的回答不会被接受。我认为您应该编辑问题以反映 OP 的意图,而不是对特定于某个 shell 的答案投反对票。
    • @Andrew - 我也相信 OP 使用 bash,但由于他在问题中没有提到它,我们不能确定这是故意的。也许他根本不知道许多不同的 shell 都有各种扩展,如果你想编写可移植的脚本,你应该避免这些扩展。在这种情况下,他以后可能会想知道为什么他的脚本在其他环境中会失败。由于有一个便携的简单解决方案,我真诚地认为最好避免使用外来功能。
    【解决方案2】:

    你可以这样做:

    case "$VAR" in
      *UAT*)
       # code when var has UAT
      ;;
    esac
    

    【讨论】:

    • case "$VAR" in 始终可以替换为 case $VAR in。 Shell 不会对 case 后面的单词执行 字段拆分路径名扩展。同样,var="$other"var=$other 一样安全。
    【解决方案3】:

    如果您提前知道要查找的字符串,经典方法是 case 语句:

    case "$VAR" in
    *UAT*) : OK;;
    *)     : Oops;;
    esac
    

    您可以使用适当的命令代替: 命令。这也适用于 Bourne 和 Korn shell,而不仅仅是 Bash。

    【讨论】:

      【解决方案4】:
      found=`echo $VAR | grep -c UAT`
      

      然后测试 $found 非零。

      【讨论】:

      • 这也可以。 -c, --count 抑制正常输出;而是打印每个输入文件的匹配行数。
      【解决方案5】:

      您可以在bash 脚本中使用

      if [ "$VAR" != "${VAR/UAT/}" ]; then
        # UAT present in $VAR
      fi
      

      【讨论】:

        【解决方案6】:

        用 grep 试试:

        $ echo I\-UAT | grep UAT
        $ echo $?
        0
        $ echo I\-UAT | grep UAX
        $ echo $?
        1
        

        所以测试

        if [ $? -ne 0 ]; then
          # not found
        else
          # found
        fi
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-11
          • 2020-07-28
          • 2014-04-10
          • 1970-01-01
          • 2012-11-02
          相关资源
          最近更新 更多