Вот сценарий оболочки:
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"