Использование позиционных параметров в функциях bash

Вот пример, в котором $1 не работает.

$ cat ~/myScript
#!/bin/bash
function hello () {
echo "Hello $1"
}
hello
$ ./myScript
 Hello
1
задан 21 November 2017 в 18:13

2 ответа

Думайте о функциях как мини-сценарии в рамках сценария. Они проигнорированы сценарием, пока не призвано. Так, позиционные параметры проигнорированы, пока не передано функции.

Они ограничены, хотя относительно того, что они могут сделать. Я знаю, что они не могут поддерживать 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

Поскольку Вы продолжаете писать сценарий Вас, начинают узнавать больше приемы и надлежащие команды и как они используются. Продолжите писать сценарий!!

Надеюсь, это поможет!

2
ответ дан 21 November 2017 в 18:13

Это работает, но, возможно, вы не используете его, как вы должны. $ 1 относится к первому параметру функции.

function hello () { echo "Hello $1" }

объявляет функцию, так что при вызове ее с параметрами она выводит «Hello» и первый параметр:

hello WORLDDD

выводит «Hello WORLDDD»

0
ответ дан 21 November 2017 в 18:13

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

Похожие вопросы: