LINUX.ORG.RU

case: неправильно работает внутри функции

 ,


0

2

Разъясните, пожалуйста, почему так происходит: 1 параметр = «f»

В этом варианте

func () {
case "$1" in
	"f" )
		echo OK
		;;
	* )
		echo "ОШИБКА"
		;;
esac
}

func

echo $1
результат:
ОШИБКА
f

А в этом варианте

case "$1" in
	"f" )
		echo OK
		;;
	* )
		echo "ОШИБКА"
		;;
esac

echo $1
результат:
OK
f

Ответ на: комментарий от saahriktu

Не силен в терминологии bash, но мне кажется, что функция - это просто последовательность команд, заключенных внутри {}, какой может быть аргумент? Скрипту передается 1-й параметр «f»:

scriptname f

В таком варианте:

a="$1"
func () {
case "$a" in
	"f" )
		echo OK
		;;
	* )
		echo "ОШИБКА"
		;;
esac
}

func

echo $1
все работает как задумано: отрабатывает echo OK. Почему так?

carabo ()
Ответ на: комментарий от carabo

Не силен в терминологии bash, но мне кажется, что функция - это просто последовательность команд

Функция это, конечно, последовательность команд, но если ты используешь в функции позиционные параметры, то передавай их в неё при её вызове.

kostik87 ★★★★★ ()
Ответ на: комментарий от carabo

это просто последовательность команд

Нет. Как и в полноценных языках программирования, у функций bash'а свои собственные аргументы, которые нужно им передавать при вызове.

$ cat test2
func () {
        echo "$1"
}

func "other arg"
$ ./test2 first_arg
other arg

saahriktu ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.