Как выполнить итерацию цикла параметров while для возврата суммы?

Поскольку все новые процессы принадлежат к одной и той же группе процессов, группе родительского процесса, процесс запускает группу процессов (fork), а затем с соответствующим протоколированием и задержкой введите control+c. Все они едят SIGINT.

$ perl -E 'fork for 1..2;say "ima $$"; $SIG{INT}=sub{die "woe $$\n"}; sleep 999'
ima 80920
ima 80922
ima 80921
ima 80923
^Cwoe 80920
woe 80922
woe 80921
woe 80923
$ 

(Добавьте strace или sysdig или что-то подобное, чтобы увидеть задействованные системные вызовы или сигналы.)

0
31.01.2017, 02:38
2 ответа

Bash не предназначен для численных расчетов. Это оркестратор , а не «язык» в том смысле, как C или Python. См. Подробнее:


Я бы сделал это примерно так:

mysum() (
  IFS=+
  bc<<<"$*"
)

Или, возможно:

mysum() (
  IFS=+
  echo "$(($*))"
)

Затем назовите это так:

$ mysum 5 89 83 7 0 2
186
3
28.01.2020, 02:25

Что-то вроде этого, я думаю, это нормально:

if [[ $# -lt 1 ]]
then
        echo "Please input a valid amount of numbers. Need at least one."
        exit 1
else
        n=$#
        sum=0
        for arg in "$@"
        do
          echo "$arg"
          sum=$(($sum+$arg))
        done
fi

echo "sum=$sum"
echo "number of parameters=$n"

Если вы предпочитаете метод сдвига параметров, это тоже сработает:

if [[ $# -lt 1 ]]
then
        echo "Please input a valid amount of numbers. Need at least one."
        exit 1
else
        n=$#
        sum=0
        while [[ $# -ne 0 ]];
        do
          echo "arg=$1"
          sum=$(($sum+$1))
          shift
        done
fi

echo "sum=$sum"
echo "number of parameters=$n"
2
28.01.2020, 02:25

Теги

Похожие вопросы