我有一个名为x的字符串。该数组包含12个以换行符分隔的数字。 (我只键入了"$x"
,就给了1\n2\n3\n4\n5\n6\n7\n8\n53\n54\n55 74
。)在一个for循环中,我想检查循环索引是否与数组x的任何元素匹配。
这就是我尝试的方式。
echo $x # This return 1 2 3 4 5 6 7 8 53 54 55 74
for ((i=1; i<=$(cat Reaction_names | wc -l); i++)); do
Condition=$(awk 'BEGIN{print ('${i}'=='$x')?1:0}')
if [ $Condition = 1 ]
then
bla bla bla ......
fi
done
此代码会产生错误,例如“ 1 ^意外换行符或字符串结尾”
答案 0 :(得分:0)
我认为您正在寻找类似的东西:
for ((i=1; i<=$(cat Reaction_names | wc -l); i++)); do
if grep -qx "$i" <<<"$x"; then
echo "number $i found !"
fi
done
您可以try it here。
if grep -qx "$i" <<<"$x"; then
行可以理解如下:
if command; then
:如果命令返回的退出代码为零,则执行该代码(如果grep
与某些内容匹配,则退出的代码为0,否则为其他代码)
grep
的{{1}}标志使-q
抑制其输出,由于只依赖退出代码,因此我们不需要此输出。
grep
的{{1}}标志使其仅与全行匹配,这可确保在查找“ 12”时不与“ 123”匹配(正则表达式替代:匹配{{ 1}},而不是grep
)
-x
是一个字符串,提供您的数字列表作为^12$
的输入。