Параметр не виден в функции

Я пишу скрипт, где мне нужно работать с параметрами.

Вот мой foo.sh:

say_hello()
{
  if [ "$1" == "hello" ]
  then
    echo "hello"
  else
    echo "<$1>"
  fi
}

echo "$1"
say_hello

Вывод выглядит очень странно для меня:

hello
<>

Не могли бы вы объяснить мне, почему в функции я не могу работать с параметрами? И как я могу передать параметры скрипта в функцию?

Параметры для функции отличаются от параметров для оболочки.

Mihir Luthra 13.07.2019 19:24

@SeanBright, ты совершенно прав. Спасибо. Добавьте этот комментарий в качестве ответа, и я выберу его.

Laughing_Man 13.07.2019 19:26

ИЛИ say_hello "$@" передать все параметры

cdarke 14.07.2019 11:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
134
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Параметры, которые вы передаете функциям в вашей оболочке, отличаются от параметров, передаваемых самой оболочке.

Например, если 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 относится к первому аргументу, который был передан функции при ее вызове из скрипта.

Другие вопросы по теме