Использованиеhttps://www.shellcheck.net(Я использую его как синтаксический плагин vim для создания сырой IDE)
Я бы пошел с этим;
#!/bin/bash
P="$(echo -n "$1" | wc -c)"
SUM=0;
for X in $(echo "$1" | fold -w 1) ; do
SUM=$(echo "$SUM+($X^$P)" | bc );
done
echo "$SUM"
Это не «чистый» bash, но я считаю, что сила bash заключается в широком выборе инструментов,и приоритет разборчивости.
для трассировки стека: если вы добавите следующее в начало всех ваших скриптов, это сообщит вам об ошибках;
set -e
trap 'echo "ERROR: $BASH_SOURCE:$LINENO $BASH_COMMAND" >&2' ERR
он остановит скрипт на строке ошибки, сделает вывод как
test.sh: line 7: no: command not found
ERROR: test.sh:7 no + 5
вместо (потенциально тихо )игнорируя ошибки. Используйте -x для отладки;
bash -x armstrong.sh 222
++ echo -n 222
++ wc -c
+ P=3
+ SUM=0
++ fold -w 1
++ echo 222
+ for X in $(echo "$1" | fold -w 1)
++ echo '0+(2^3)'
++ bc
+ SUM=8
+ for X in $(echo "$1" | fold -w 1)
++ echo '8+(2^3)'
++ bc
+ SUM=16
+ for X in $(echo "$1" | fold -w 1)
++ echo '16+(2^3)'
++ bc
+ SUM=24
+ echo 24
24