Увеличение глобальной переменной в Bash

Вот сценарий оболочки:

globvar=0

function myfunc {
  let globvar=globvar+1
  echo "myfunc: $globvar"
}

myfunc
echo "something" | myfunc

echo "Global: $globvar"

При вызове выводит следующее:

$ sh zzz.sh
myfunc: 1
myfunc: 2
Global: 1
$ bash zzz.sh
myfunc: 1
myfunc: 2
Global: 1
$ zsh zzz.sh
myfunc: 1
myfunc: 2
Global: 2

Вопрос в том, почему это происходит и что поведение правильное?

PS У меня странное ощущение, что функция, стоящая за конвейером, вызывается в разветвленной оболочке ... Итак, может быть простой обходной путь?

PPS Эта функция является простая тестовая обертка. Он запускает тестовое приложение и анализирует его вывод. Затем он увеличивает переменные $ PASSED или $ FAILED. Наконец, вы получите количество пройденных / неудачных тестов в глобальных переменных. Пример использования:

test-util << EOF | myfunc
input for test #1
EOF
test-util << EOF | myfunc
input for test #2
EOF
echo "Passed: $PASSED, failed: $FAILED"
11
задан codeforester 15 November 2018 в 23:01
поделиться