É possível fazer isso de maneira sh, mas não é muito eficiente para grandes strings.
compare_characters () {
tail1="$1" tail2="$2"
if [ "${#tail1}" -ne "${#tail2}" ]; then
echo >&2 "The strings have different length"
return 1
fi
while [ -n "$tail1" ]; do
h1="${tail1%"${tail1#?}"}" h2="${tail2%"${tail2#?}"}"
if [ "$h1" = "$h2" ]; then
echo true "$h1"
else
echo false "$h1" "$h2"
fi
tail1="${tail1#?}" tail2="${tail2#?}"
done
}
Como alternativa, se você não se importar com um formato de saída diferente, use cmp -l
. Em um shell que possui substituição de processo (ksh, bash ou zsh):
cmp <(printf %s "$string1") <(printf %s "$string2")
Sem a substituição do processo, você precisa usar uma solução alternativa para passar duas sequências para o comando: um canal nomeado, ou gravar em um arquivo temporário ou usar /dev/fd
se sua plataforma for compatível.
printf %s "$string1" | {
exec 3<&0
printf %s "$string2" | cmp /dev/fd/3 /dev/fd/0
}