我正在根据命令的输出构建一个数组。输出的每一行都是数组中的一项。然后,我将迭代每个项目并测试特定的字符序列。
#!/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"
这似乎解决了我遇到的问题。