@estoy

Почему в функции bash не видно переменную «$#» ?

Всем привет. Вообщем проблема такая. Есть некий сценарий на bashе, там есть функция которая проверяет количество переданных сценарию параметров, и в зависимости от того передан параметр или нет, функция выполняет определенные действия. Например:

#!/bin/bash
function my_func() {
if [ $# -eq 0 ]; then
echo "Передано 0 параметров"
else
echo "Передано $# параметров"
fi
}

my_func

но при вызове скрипта и передачи ему параметров, эта переменная "$#" всегда равна нулю, хотя если просто написать не в теле функции echo "$#", то покажет количество переданных сценарию параметров. Вопрос, почему так, не могу врубится?
Версия bash 4.2.25(1)
  • Вопрос задан
  • 2659 просмотров
Решения вопроса 2
akarin
@akarin
В функции локальная область видимости.

#!/bin/bash
if [ $# -eq 0 ]; then 
echo "Передано 0 параметров"
else
echo \"Передано $# параметров\"
fi

echo $1
Ответ написан
merryjane
@merryjane
Системный администратор
Вы передаете аргументы на вход скрипта, а не на вход функции.
Она за $# считает те аргументы, которые переданы непосредственно ей.
Это можно увидеть модифицировав Ваш пример вот так:
#!/bin/bash
function my_func() {
if [ $# -eq 0 ]; then
echo "Передано 0 параметров"
else
echo "Передано $# параметров"
fi
}

my_func fist_arg second_arg
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@safinaskar
Чтобы передать функции в точности все исходные аргументы, можно написать так: my_func "$@"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы