Bash-递增一个变量,直到可以在另一个变量中找到它+;如果符合条件

Bash-递增一个变量,直到可以在另一个变量中找到它+;如果符合条件,bash,Bash,我需要依次递增该变量将带来的结果: a= "a b c d x y z" 直到它可以匹配到另一个变量 b="gibberish x gibberish y" 发生这种情况时,将第一个匹配项声明为变量 var=x 然后从这个结果变量中,测试一个条件 if test $var = $(something); then //it's good//; else //keep incrementing//; fi 如果不满足条件,则继续递增原始变量,直到该条

我需要依次递增该变量将带来的结果:

a= "a b c d x y z"
直到它可以匹配到另一个变量

b="gibberish x gibberish y"
发生这种情况时,将第一个匹配项声明为变量

var=x
然后从这个结果变量中,测试一个条件

if test $var = $(something); then //it's good//; else //keep incrementing//; fi
如果不满足条件,则继续递增原始变量,直到该条件匹配为止

var=y

依此类推,直到所有内容都匹配为止

您可以使用bash和循环执行您试图执行的操作,在
a
中的每个字符上循环,同时在
b
中的单词上循环,检查当前字符是否与该单词匹配(因为您不想匹配
b
中单词中随机包含的字符)

如果找到匹配项,则检查
something
,并且匹配的字符是否等于
something
中的任何字符。否则,您只需继续循环。您可以使用标志(例如true/false,1/0)变量,用于指示在两个变量
a
b
结束之前,是否发现与
某物一致的成功匹配

您可以执行类似以下操作:

!/bin/bash
a=“a b c d x y z”
b=“胡言乱语x胡言乱语y”
found=0##标志,指示var=已成功分配
var=“”
something=“${1:-x}”##快速破解你的东西
因为我一美元一个;在一个
对于$b中的j;在b中的单词上循环
如果[“$i”=“$j”];那么##如果char是单词
如果[“$i”=“$something”];那么##char$something是什么?
var=“$i”##等于var
已找到=1;##设置已找到标志
中断;##中断单词循环
fi
fi
完成
[“$found”-eq 1]&&break;###如果找到,则退出char循环
完成
如果[“$found”-等式1];则
echo“与“$var”匹配”##char匹配的输出
其他的
回显“未找到匹配项”
fi
示例使用/输出

其中
某物将匹配
x

$bash match.sh
与“x”匹配
其中
某物将匹配
y

$bash match.sh y
与“y”匹配
a
中没有字符与
某物

$bash match.sh foo
没有找到匹配项

还有其他方法可以做到这一点,使用临时文件,
grep-f
和REGEX,但这是单独使用bash的一种方法。请仔细查看,如果您有问题或我没有理解
某事的意图,请告诉我。那么,到目前为止,您尝试了什么?是否有任何错误?到底是什么问题?最接近wh的答案我需要的是,但是我发现数组的声明对于我在bash中的知识来说太复杂了。它是这样的,但是我需要引入第三个条件,并且只有一个变量。非常感谢,一个很好的详细答案。在我的例子中,“某物”是一个命令的输出。我如何集成$(命令)进入数组?我不确定我是否遵循,你总是可以做
a=“a b c d x y z$(某物)”
,或者如果你想让它直接进入循环,
为I in$a$(某物);…
(注意:
a
不是数组,它是一个简单的列表。数组应该是
a=(a b c d x y z$(某物))
只是一个推荐的替换,命令的输出被替换在它的位置上。你可以在任何你喜欢的地方使用它。总是要注意引用什么是需要的。如果
$(something)
将包含空格,并且你想把它全部当作一个值,你需要,例如
a=(a b c d x y z“$(某物)”