检查数组中每个项目的子字符串

检查数组中每个项目的子字符串

我正在根据命令的输出构建一个数组。输出的每一行都是数组中的一项。然后,我将迭代每个项目并测试特定的字符序列。

#!/bin/bash

readarray -t LST < <(#read in single or multiline output from command)
d="sometext:123"
SUBS=":$(echo $d | cut -d':' -f 2)"
for i in "${LST[@]}"
do
  if [[ $i == *"$SUBS"* ]]
  then
    #save $i in new variable
    exit 0
  fi
done
echo "no match"
exit 1

该问题似乎与 $SUBS 变量有关。如果我根据上面的内容 echo $SUBS,它会输出:123,但比较显然返回 false。如果我这样填充 SUBS:

SUBS=":123"

比较结果似乎符合预期。使用我尝试过的任何其他填充 $SUBS 的方法,比较似乎返回 false。问题是,$d 可能不完全包含“:123”。它可以是“:456”或前面带有 : 的其他数字。

答案1

使用 Jeff Schaller 建议使用 set -x (请参阅上面的注释),在输出中,我发现了类似于 /bin/bash = /bin/ksh 的行。这促使我使用 ksh 而不是 bash 来 google 搜索我要搜索的内容。我看到了这篇文章:

如何判断一个字符串是否包含 unix-shell 脚本中的另一个字符串

根据接受的答案,我将 if 行更改为:

if test "${i#*$SUBS}" == "$i"

这似乎解决了我遇到的问题。

相关内容