Как перебрать заданные аргументы для вывода имени и значения аргумента с помощью функции Bash? - PullRequest
1 голос
/ 04 июня 2019

Я хочу написать вспомогательную функцию для моих сценариев Bash, которая выводит установленные переменные и их значения по умолчанию перед выполнением остальной части сценария.

Я могу делать то, что хочу, без функции:

host="postgres.database.com"
port="5432"
username="dbadmin"
dbname="test"

# Code below needs to be a function
for argument in host port username dbname
do
    echo "$argument: ${!argument}"
done

Вывод:

host: postgres.database.com
port: 5432
username: dbadmin
dbname: test

Однако я хотел бы повторно использовать этот код в других сценариях, например:

print_arguments $host $port $username $dbname

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

print_arguments() {
    for argument in "$@"
    do
        echo "${!argument*}" "$argument"
        echo "${argument@A}" "$argument"
    done
}

Результаты обычно выглядят так:

argument postgres.database.com
argument 5432
argument dbadmin
argument test

Где argument - переменнаяимя, используемое в цикле for.Я хочу, чтобы он мог разрешить исходное имя переменной, например, host или port.

1 Ответ

3 голосов
/ 05 июня 2019

Передайте переменные имена вместо их значений до print_arguments.

print_arguments host port username dbname

Тогда цикл, который у вас есть наверху, работает.

print_arguments() {
    for argument in "$@"
    do
        echo "$argument: ${!argument}"
    done
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...