在字符串中找不到子字符串

时间:2017-07-04 09:50:40

标签: bash

我使用bash版本3.2.51(1)

我在工作链上工作,并希望在旧工作完成后开始新工作。 因此,我检查当前正在运行的作业,并且只有在找不到上次运行的作业编号时,才会提交新作业。

以下是我脚本的一部分:

    Job_ID=$(msub -E fvcom.pbs)

    # test whether job is still running

    CONTINUE="just started"
    # do this loop, until the CONTINUE variable is empty (i.e. job is finished)
    until [ -z "$CONTINUE" ] ; do
       # wait $WAIT seconds
       sleep $WAIT
       # query if job is still running
       RUNNING=$(./show_my_run)
      echo $RUNNING
      echo $Job_ID 

       # check whether specific job is still running
       # then job ID is present in job overview
       if [[ $RUNNING == *"$Job_ID"* ]] ; then
       CONTINUE="Job_ID found"
       echo $CONTINUE
       else 
       CONTINUE=""
       echo "Job_ID not found"
       fi

    done

输出结果为:

city.12345 / 1202110.batch.com kdd046 Running 4 00:59:14 Tue Jul 4
city.12345
找不到Job_ID

显然我可以看到Job_ID存在并且作业仍在运行... 只有在运行多个作业并且模式位于中间的某个位置时才会识别该模式:

city.54321 / 1202133.batch.com kdd046 Running 4 00:59:14 Tue Jul 4 city.12345 / 1202110.batch.com kdd046 Running 4 00:56:19 Tue Jul 4
city.12345
发现Job_ID

我也尝试过使用

...
如果回显“$ RUNNING”| grep -q“$ Job_ID”;然后
......

但结果相同。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用declare -p Job_ID我发现在使用echo未显示的变量Job_ID的开头有一个换行符。

现在,我添加了一个更改,以摆脱这个额外的行,它的工作原理:

  Job_ID=$(msub -E fvcom.pbs | perl -p -e 'chomp' )

答案 1 :(得分:-1)

试试这个:

RUNNING="city.12345/test"
Job_ID="city.12345"

if [[ "$RUNNING" =~ ".*$Job_ID*" ]]; then
echo "match"
fi

(编辑:现在,如果X包含Y)