Вот пример, в котором $1
не работает.
$ cat ~/myScript
#!/bin/bash
function hello () {
echo "Hello $1"
}
hello
$ ./myScript
Hello
Думайте о функциях как мини-сценарии в рамках сценария. Они проигнорированы сценарием, пока не призвано. Так, позиционные параметры проигнорированы, пока не передано функции.
Они ограничены, хотя относительно того, что они могут сделать. Я знаю, что они не могут поддерживать if then
операторы в функции, поскольку они проигнорированы. И существуют некоторые другие правила, но Вы можете exit
Ваш сценарий из функции. Если у Вас есть проверка ошибок с параметрами, они должны быть выполнены, прежде чем функция вызвана.
Вы желаете передать позиционные параметры (1$, 2$, 3$ и т.д....) в Ваш сценарий. Однако Вы ожидаете, что позиционный параметр будет передан функции. Не указывая параметр, когда Вы вызываете функцию, функция не получает параметр. Необходимо дать ему параметр.
Возьмите свой сценарий:
#!/bin/bash
function hello () {
echo "Hello $1"
}
hello
Просто путем добавления a $1
к строке, которая просто говорит hello
отдельно сделает его так, чтобы параметр был передан функции.
#!/bin/bash
function hello () {
echo "Hello $1"
}
hello $1
Теперь вызов сценария с параметром произведет желаемый вывод:
$ ./myscript Terrance
Hello Terrance
Если Вы хотите добавить быструю проверку к нему так, чтобы это не брало пустой вход после сценария, добавьте, что следующее зарегистрировалось в Вашем сценарии перед вызовом:
#!/bin/bash
function hello () {
echo "Hello $1"
}
if [[ $1 != "" ]]; then
hello $1
exit
else
echo "Please input a name. Example: $0 Terrance"
fi
Мой сценарий в качестве примера выше делает проверку !=
что означает not equal to
затем два ""
пробел средств. Так, if parameter 1 is not equal to blank then
верно затем, что это работает, вызов функции с параметром затем выходит из сценария после того, как функция вызвана. Еще это дает мое сообщение об ошибке. Позиционный параметр $0
параметр команды, которую Вы просто назвали.
Примеры моего сценария называют:
$ ./myscript
Please input a name. Example: ./myscript Terrance
$ ./myscript Terrance
Hello Terrance
Поскольку Вы продолжаете писать сценарий Вас, начинают узнавать больше приемы и надлежащие команды и как они используются. Продолжите писать сценарий!!
Надеюсь, это поможет!
Это работает, но, возможно, вы не используете его, как вы должны. $ 1 относится к первому параметру функции.
function hello () { echo "Hello $1" }
объявляет функцию, так что при вызове ее с параметрами она выводит «Hello» и первый параметр:
hello WORLDDD
выводит «Hello WORLDDD»