使用for循环在bash中逐字符比较两个字符串

时间:2019-05-07 02:42:16

标签: bash sh

我正在编写一个bash脚本,该脚本循环遍历一个很大的数据文件,我提取了我需要使用的关键部分。当我尝试执行此操作时似乎很琐碎,但我需要做的只是类似于

string1=...
string2=...    
correct=0
for i in 1..29
do
   if [string1[i] == string2[i]]
   then
      correct=correct+1
   fi
done

当我尝试执行此类操作时,我会得到一个Bad Substitution,我认为这是因为某些键的外观如下,

  `41213343323455122411141331555 - key` 
  `3113314233111 22321112433111* - answer`

在我的情况下,发现的空格和职业*不需要特殊处理,只需对每个索引进行简单比较即可。

#!/bin/bash
answersCorrect=0
for i in $(nawk 'BEGIN{ for(i=1;i<=29;i++) print i}')
do
  if [ "${answer:i:1}" = "${key:i:1}" ]
   then
    answersCorrect=$answersCorrect+1 #this line#
  fi
done

我现在没有编译器错误,但是我认为我没有正确地递增answersCorrect。当我输出时,它类似于0+1+1+1而不是3(此段在while循环内使用)

该行的固定解决方案:answersCorrect=$((answersCorrect+1))

1 个答案:

答案 0 :(得分:1)

最初的问题已通过注释和@Mikel的一些额外工作解决。 一种替代方法是在将字符串转换为行之后比较字符串。

diff --suppress-common-lines <(fold -w1 <<< "${string1}") <(fold -w1 <<< "${string2}") |
    grep -c "^<"