Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.
Модератор: Bizdelnick
safronowmax
Сообщения: 103
Сообщение
safronowmax » 17.03.2021 17:14
Здравствуйте, подскажите пожалуйста, начинаю изучать функции в bash и не могу понять - есть простейший скрипт, запуск которого с нужным ключом mykey должен приводить к выводу текста "мой текст". Скрипт работает, но если я его помещаю в функцию myfunc, то скрипт перестает работать, никаких ошибок при запуске скрипта нет, но и вывода текста не происходит. С чем это может быть связано?
Вот исходный скрипт:
Код: Выделить всё
#!/bin/bash
case "$1" in
-mykey)
echo "мой текст"
esac
Вот обернутый в функцию:
Код: Выделить всё
#!/bin/bash
function myfunc {
case "$1" in
-mykey)
echo "мой текст"
esac
}
myfunc
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 17.03.2021 18:26
Потому что внутри функции $1 — это аргумент функции, а не скрипта. А Вы ей никаких аргументов не передаёте.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
safronowmax
Сообщения: 103
Сообщение
safronowmax » 18.03.2021 07:22
Bizdelnick, спасибо большое. Но не могу понять, а как тогда в этом случае можно передать аргумент именно скрипту при использовании функции?
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:
Сообщение
Hephaestus » 18.03.2021 08:05
safronowmax писал(а): ↑ 18.03.2021 07:22
а как тогда в этом случае можно передать аргумент именно скрипту при использовании функции?
Точно так же. Просто у Вас получилось $1 внутри функции, а для скрипта нужен ещё один $1 - внутри скрипта, но за пределами функции.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
s.xbatob
Сообщения: 1139
ОС: Fedora
Сообщение
s.xbatob » 18.03.2021 15:56
safronowmax писал(а): ↑ 18.03.2021 07:22
Но не могу понять, а как тогда в этом случае можно передать аргумент именно скрипту при использовании функции?
Не понял что вы хотите — передать аргументы скрипта в функцию? Тогда
myfunc "$@"
safronowmax
Сообщения: 103
Сообщение
safronowmax » 18.03.2021 17:49
Не понял что вы хотите — передать аргументы скрипта в функцию? Тогда myfunc "$@"
s.xbatob, спасибо вам большое! Это именно то, что мне нужно
s.xbatob
Сообщения: 1139
ОС: Fedora
Сообщение
s.xbatob » 18.03.2021 18:24
safronowmax , всегда пожалуйста
Только передавать все аргументы в функции — не самое мудрое решение. Их лучше один раз разобрать в начале скрипта, а в функции передавать только то, что они хотят. И для разбора есть специальные инструменты: getop и getopts. Правда, их использовать не слишком просто, но — в шелле всё так
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 18.03.2021 18:52
s.xbatob писал: ↑ 18.03.2021 18:24
И для разбора есть специальные инструменты: getop и getopts.
Для ознакомления лучше считать, что есть только getopts, ибо он стандартен и есть везде.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
s.xbatob
Сообщения: 1139
ОС: Fedora
Сообщение
s.xbatob » 18.03.2021 20:48
Bizdelnick писал: ↑ 18.03.2021 18:52
Для ознакомления лучше считать, что есть только getopts, ибо он стандартен и есть везде.
getopt
Он кое-куда уже встроен (в bash точно есть), и использовать его проще. Правда, и возможностей меньше.
Добавлено (20:54):
ой, наоборот. Действительно getopts