Требование состоит в том, что при вызове сценария, как показано ниже:
my_script.sh 1 2 3 4
Скрипт должен уметь складывать эти числа и печатать сумму в конце.
num=0
for arg in "$@"
do
for number in $arg
do
(( num += $number ))
done
done
Я написал сценарий, как указано выше, но не получил желаемого результата.
Вывод просто "1 2 3 4".
Я пытался запустить сценарий с bash и другими оболочками (zsh, tcsh, mksh), и все работает. Вы можете неправильно вызвать сценарий.





Ваш скрипт ничего не выводит. Попробуйте добавить
echo $num
в конце.
НО ваш скрипт можно упростить. Как написано, ваш скрипт будет работать для ввода, например
my_script.sh 1 '2 3' 4
а также, поскольку он сначала перебирает аргументы (for arg in "$@"), а затем также перебирает все слова в каждом аргументе (for number in $arg). Второй цикл вам не нужен.
Кроме того, название результата $sum, кажется, лучше объясняет его цель. Итак, вы можете просто ввести
#!/bin/bash
sum=0
for number in "$@" ; do
(( sum += number ))
done
echo $sum
Вывод просто "1 2 3 4". Не печатает сумму.
Меня устраивает. Вы запускаете правильный скрипт? Как вы его вызываете? Какую оболочку он использует?
Это сработало. Большое спасибо. Я использовал онлайн-редактор bash. Работал на моем локальном рабочем столе.
Каков результат и чем он отличается от желаемого результата? -- Кроме того, в командной строке вы можете использовать до н.э для быстрых сумм, например.
echo 1 2 3 4 | tr ' ' '+' | bc