Я пишу скрипт, где мне нужно работать с параметрами.
Вот мой foo.sh:
say_hello()
{
if [ "$1" == "hello" ]
then
echo "hello"
else
echo "<$1>"
fi
}
echo "$1"
say_hello
Вывод выглядит очень странно для меня:
hello
<>
Не могли бы вы объяснить мне, почему в функции я не могу работать с параметрами? И как я могу передать параметры скрипта в функцию?
@SeanBright, ты совершенно прав. Спасибо. Добавьте этот комментарий в качестве ответа, и я выберу его.
ИЛИ say_hello "$@" передать все параметры





Параметры, которые вы передаете функциям в вашей оболочке, отличаются от параметров, передаваемых самой оболочке.
Например, если print_script_args выглядит так:
echo $1
echo $2
то ./print_script_args hello world напечатает это:
hello
world
и если print_function_args выглядит так:
foo() {
echo $1
echo $2
}
foo bye world
то ./print_function_args hello planet напечатает это:
bye
world
— параметры скрипта ничего не делают, потому что печатаются параметры, переданные функции оболочки, а именно bye world.
Вам нужно вызвать функцию say_hello с входным параметром.
Внутри say_hello$1 относится к первому аргументу, который был передан этой функции. Однако вы вызываете его без каких-либо аргументов, например:
say_hello
Что вам нужно, так это передать $1 (из основного контекста скрипта) в качестве параметра функции say_hello, например:
say_hello $1
В сценарии $1 относится к первому аргументу, переданному сценарию при запуске из командной строки. В функции say_hello$1 относится к первому аргументу, который был передан функции при ее вызове из скрипта.
Параметры для функции отличаются от параметров для оболочки.