Bash 在字符串中找不到子字符串
我使用bash版本3.2.51(1) 我与工作链一起工作,希望在旧工作完成后开始新工作。 因此,我检查当前正在运行的作业,只有在找不到上次运行的作业编号时,才会提交新作业 以下是我脚本的一部分:Bash 在字符串中找不到子字符串,bash,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
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运行4 00:59:14星期二7月4日城市12345
找不到作业ID 显然,我可以看到作业ID存在,并且作业仍在运行。。。 仅当有多个作业正在运行且模式位于中间某个位置时,才能识别该模式: city.54321/1202133.batch.com kdd046运行4 00:59:14星期二7月4日city.12345/1202110.batch.com kdd046运行4 00:56:19星期二7月4日
城市12345
找到工作ID 我也试过使用 …
如果echo“$RUNNING”| grep-q“$Job_ID”;然后
... 但结果是一样的 我做错了什么?试试这个:
RUNNING="city.12345/test"
Job_ID="city.12345"
if [[ "$RUNNING" =~ ".*$Job_ID*" ]]; then
echo "match"
fi
(编辑:现在,如果X包含Y)尝试以下操作:
RUNNING="city.12345/test"
Job_ID="city.12345"
if [[ "$RUNNING" =~ ".*$Job_ID*" ]]; then
echo "match"
fi
(编辑:现在,如果X包含Y)使用
声明-p作业ID
我发现变量作业ID的开头有一个换行符,没有使用echo
显示
现在,我加入了一个改变,以摆脱这一额外的行,它的工作:
Job_ID=$(msub -E fvcom.pbs | perl -p -e 'chomp' )
使用
declare-p Job_ID
我发现变量Job_ID的开头有一个换行符,没有使用echo
显示
现在,我加入了一个改变,以摆脱这一额外的行,它的工作:
Job_ID=$(msub -E fvcom.pbs | perl -p -e 'chomp' )
结尾的
*
看起来是错误的,现在只匹配字符串的开头,我认为这是不对的。你能重现OP的问题吗?是的,我知道,我在考虑用这个来表示OR。。无论如何,我编辑了答案,它与Bash 4.3配合使用,我希望它也能与3.2配合使用。只要我手动设置运行字符串和作业ID,一切都正常。问题是,为什么OP看似有效的方法不起作用?最后的*
看起来是错误的,现在只匹配字符串的开头,我认为这是不对的。你能重现OP的问题吗?是的,我知道,我在考虑用这个来表示OR。。无论如何,我编辑了答案,它适用于Bash 4.3,我希望它也适用于3.2。只要我手动设置运行字符串和作业ID,一切都正常。问题是,为什么OP的看似有效的方法不起作用?您确定调用返回的字符串只包含文本字符吗?我想知道你是否有一些非ascii字符隐藏在那里,混淆了比较。特别是在你在下面的评论中提到,如果你手动设置变量,它是有效的;然后echo“Running contains Non-ASCII”else echo“Running not contains Non-ASCII”fi根据Running和Job_ID都没有非ASCII字符(我希望这是检查这一点的正确方法,我对bash是完全陌生的…)您是否可以尝试declare-p RUNNING
转储变量的内容,而不是“echo”它?参考:我不知道你是否能得到一个好的答案,除非你提供一个好的答案。你确定你从通话中返回的字符串只包含文本字符吗?我想知道你是否有一些非ascii字符隐藏在那里,混淆了比较。特别是在你在下面的评论中提到,如果你手动设置变量,它是有效的;然后echo“Running contains Non-ASCII”else echo“Running not contains Non-ASCII”fi根据Running和Job_ID都没有非ASCII字符(我希望这是检查这一点的正确方法,我对bash是完全陌生的…)您是否可以尝试declare-p RUNNING
转储变量的内容,而不是“echo”它?我不知道你是否能得到一个好的答案,除非你提供一个答案