GOOGLE ADS

воскресенье, 10 апреля 2022 г.

Объявление -u в bash также делает переменные локальными?

Я озадачен выводом этого примера сценария. Кажется, что some_other_var неявно объявляется как локальный, когда я объявляю его в верхнем регистре (объявить -u):

#!/bin/bash
function works() {
some_var="${1}"
printf "in the function, some_var is ${some_var}\n"
}
function doesnt_work() {
declare -u some_other_var="${1}"
printf "in the function, some_other_var is ${some_other_var}\n"
}
works "apple"
printf "got back this value of some_var from the function: ${some_var}\n"
doesnt_work "banana"
printf "got back this value of some_other_var from the function: ${some_other_var}\n"

Выход:

in the function, some_var is apple
got back this value of some_var from the function: apple
in the function, some_other_var is BANANA
got back this value of some_other_var from the function:

объявить -u должен сделать переменную только в верхнем регистре, что он и делает. Но предполагается ли также сделать переменную локальной области видимости? У меня сложилось впечатление, что нужно было использовать директиву «local», чтобы явно пометить переменную как локальную, иначе она была глобальной, но declare -u, похоже, ведет себя по-другому.

Это:

GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)


Решение проблемы

Это общее свойство declare: при использовании в функции подразумевается локальная область. Чтобы использовать глобальную область видимости, необходимо использовать -gфлаг (Bash 4.2+).

См. руководство:

При использовании в функции declareделает каждое имя локальным, как и в localкоманде, если не используется -gпараметр.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...