a="ABCDEFG"
b="ABCDXYG"
如何在bash中计算这两个字符串之间的不同字母数字?
在这种情况下,答案是2(E != X
和F != Y
)。
答案 0 :(得分:0)
据我了解,您希望两个字符串中处于相同位置的不同字母的数量。
所以:
paste <(<<<"$a" sed 's/./&\n/g') <(<<<"$b" sed 's/./&\n/g') |
awk '$1 != $2' |
wc -l
一个有趣的纯bash解决方案:
declare -i cnt
cnt=0
while
IFS= read -r -n1 -u3 c1 &&
IFS= read -r -n1 -u4 c2
do
if [ "$c1" != "$c2" ]; then
cnt=cnt+1
fi
done 3<<<"$a" 4<<<"$b"
echo "$cnt"
答案 1 :(得分:0)
这是Shellcheck干净的纯Bash代码,没有子进程,也没有I / O:
#! /bin/bash
a=ABCDEFG
b=ABCDXYG
declare -i diffcount=0
(( ${#a} < ${#b} )) && maxlen=${#b} || maxlen=${#a}
for ((i=0; i<maxlen; i++)) ; do
[[ ${a:i:1} != "${b:i:1}" ]] && diffcount+=1
done
echo $diffcount
maxlen
是字符串的最大长度。如果其中一个字符串比另一个字符串长,那么长字符串中短字符串长度之后的每个字符都将被视为差异。如果您想要其他行为,则需要修改代码。