В 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