Isso se reduz ao problema de iterar as letras de uma palavra, o que não é trivial no bash. Minha abordagem é horrivelmente hacky, mas parece funcionar:
#!/bin/bash
WORD="$1"
REGEXP='';
ASCIISUM=0
while true; do
LETTER=$(echo "$WORD" | sed "s/$REGEXP\(.\).*//")
test "$LETTER" == "$WORD" && break;
ASCII=$(printf '%d' "'$LETTER")
echo "Adding '$LETTER': $ASCII"
ASCIISUM=$(($ASCIISUM+$ASCII))
REGEXP=".$REGEXP"
done
echo "Sum of ASCII values of '$WORD': $ASCIISUM"
Salvar em, por exemplo asciisum.sh
e ligue com /path/to/asciisum.sh "word"
Editar:
Algumas palavras de explicação:
- REGEXP é usado para manter uma expressão regular de períodos, exatamente um para cada letra que passa - isso corresponde às letras antes da que eu quero.
- Usando
sed
I, agora filtrarei essas cartas já concluídas e todas as letras após a atual, deixando apenas a letra atual
- Se meu regexp não for mais compatível (ou seja, o WORD não é alterado por
sed
), o loop está quebrado
- A partir daí é fácil: Calcular o código de letras ASCII e adicionar à soma