В bash-функциях легко наступить на грабли. Переменная без local утекает в глобальную область и портит состояние вызывающего кода. return возвращает только код завершения — 0–255, не строку и не число. Три инструмента снимают большую часть боли.
count_lines() {
local file="$1" n
n=$(wc -l < "$file")
echo "$n" # значение — через stdout, не return
}
check_disk() {
[ "$(df -h / | awk 'NR==2{print $5}' | tr -d '%')" -lt 90 ]
}
fill_array() {
local -n ref=$1
ref=(one two three)
}
my_arr=()
fill_array my_arr
Частая ошибка — вернуть число через return, когда оно больше 255 (обрежется по модулю 256). Для реальных данных — echo+$(...) или nameref, return только под true/false.
#bash
