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

Вы можете создавать ссылки вместо добавления путей:

ln -s /usr/local/cuda/lib64/libcudart.so /usr/local/lib/
ln -s /usr/local/cuda/lib64/libcudart.a /usr/local/lib/
1
задан 21 November 2017 в 19:13

6 ответов

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

Они ограничены, хотя и могут делать то, что они могут сделать. Я знаю, что они не могут поддерживать if then утверждения внутри функции, поскольку они игнорируются. Существуют и другие правила, но вы можете exit использовать ваш скрипт из функции. Если вы проверяете ошибки с параметрами, они должны быть выполнены до вызова функции.

Вы хотите передать позиционные параметры ($ 1, $ 2, $ 3 и т. д.) в свой скрипт. Однако вы ожидаете, что позиционный параметр будет передан функции. Без указания параметра при вызове функции функция не получает параметр. Вы должны указать ему параметр.

Возьмите свой скрипт:

#!/bin/bash
function hello () {
echo "Hello $1"
}
hello

Просто добавив $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 истинно, тогда он запускает вызов функции с параметром, а затем выходит из сценария после вызова функции. Иначе это дает мое сообщение об ошибке. Параметр position $0 является параметром команды, которую вы только что назвали.

Примеры моего сценария, вызываемого:

$ ./myscript 
Please input a name.  Example: ./myscript Terrance


$ ./myscript Terrance
Hello Terrance

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

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

2
ответ дан 22 May 2018 в 16:02

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

Они ограничены, хотя и могут делать то, что они могут сделать. Я знаю, что они не могут поддерживать if then утверждения внутри функции, поскольку они игнорируются. Существуют и другие правила, но вы можете exit использовать ваш скрипт из функции. Если вы проверяете ошибки с параметрами, они должны быть выполнены до вызова функции.

Вы хотите передать позиционные параметры ($ 1, $ 2, $ 3 и т. д.) в свой скрипт. Однако вы ожидаете, что позиционный параметр будет передан функции. Без указания параметра при вызове функции функция не получает параметр. Вы должны указать ему параметр.

Возьмите свой скрипт:

#!/bin/bash function hello () { echo "Hello $1" } hello

Просто добавив $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 истинно, тогда он запускает вызов функции с параметром, а затем выходит из сценария после вызова функции. Иначе это дает мое сообщение об ошибке. Параметр position $0 является параметром команды, которую вы только что назвали.

Примеры моего сценария, вызываемого:

$ ./myscript Please input a name. Example: ./myscript Terrance $ ./myscript Terrance Hello Terrance

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

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

2
ответ дан 18 July 2018 в 02:53

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

Они ограничены, хотя и могут делать то, что они могут сделать. Я знаю, что они не могут поддерживать if then утверждения внутри функции, поскольку они игнорируются. Существуют и другие правила, но вы можете exit использовать ваш скрипт из функции. Если вы проверяете ошибки с параметрами, они должны быть выполнены до вызова функции.

Вы хотите передать позиционные параметры ($ 1, $ 2, $ 3 и т. д.) в свой скрипт. Однако вы ожидаете, что позиционный параметр будет передан функции. Без указания параметра при вызове функции функция не получает параметр. Вы должны указать ему параметр.

Возьмите свой скрипт:

#!/bin/bash function hello () { echo "Hello $1" } hello

Просто добавив $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 истинно, тогда он запускает вызов функции с параметром, а затем выходит из сценария после вызова функции. Иначе это дает мое сообщение об ошибке. Параметр position $0 является параметром команды, которую вы только что назвали.

Примеры моего сценария, вызываемого:

$ ./myscript Please input a name. Example: ./myscript Terrance $ ./myscript Terrance Hello Terrance

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

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

2
ответ дан 24 July 2018 в 17:40

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

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

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

hello WORLDDD

печатает «Hello WORLDDD» [!d2 ]

0
ответ дан 22 May 2018 в 16:02
  • 1
    Tnx. Кстати, как добавить сюда эти причудливые строки с кодом. По мне все идет как одно тело текста, althogh я делят его линию после строки ..; – Josef Klimuk 21 November 2017 в 19:02
  • 2
    ctrl + K или просто нажмите кнопку, которая выглядит так: {} или (кажется, в комментариях все это не работает) с помощью символа `(backquotes) – Aurelien 22 November 2017 в 20:33

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

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

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

hello WORLDDD

печатает «Hello WORLDDD»

0
ответ дан 18 July 2018 в 02:53

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

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

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

hello WORLDDD

печатает «Hello WORLDDD»

0
ответ дан 24 July 2018 в 17:40
  • 1
    Tnx. Кстати, как добавить сюда эти причудливые строки с кодом. По мне все идет как одно тело текста, althogh я делят его линию после строки ..; – Josef Klimuk 21 November 2017 в 19:02
  • 2
    ctrl + K или просто нажмите кнопку, которая выглядит так: {} или (кажется, в комментариях все это не работает) с помощью символа `(backquotes) – Aurelien 22 November 2017 в 20:33

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

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