#bash #shell
#bash #оболочка
Вопрос:
Какова наилучшая практика использования одной и той же переменной bash (которая не является переменной среды) в нескольких сценариях, которые последовательно вызывают друг друга? Должна ли эта переменная определяться в каждом скрипте или функции, чтобы они могли использоваться повторно?
Например, предположим, что у меня есть один скрипт, который создает functions.sh
скрипт со многими меньшими функциями многократного использования.
#script_1
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" amp;amp; pwd )"
country="${1}"
. ${DIR}/functions.sh
function_1
function_2 ${country}
#functions.sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" amp;amp; pwd )"
function_1() {
echo "The country is ${country}"
}
function_2(){
local country="${1}"
if [[ ${country^^} == "UK" ]]; then
echo "Fish and Chips"
else
echo "Try local food"
fi
}
Мой вопрос таков: должна ли ${country}
переменная определяться локально в каждой атомарной функции в functions.sh
исходном файле?
Когда вызываются эти функции, ${country}
уже определено в исходном скрипте, поэтому мне не пришлось бы передавать его в качестве параметра. Я думаю, что каждый из этих сценариев не должен зависеть от какой-либо переменной, возможно, определенной ранее, но им следует предоставить всю необходимую информацию через параметры, чтобы их можно было легко использовать повторно.
Кроме того, должно ли это быть определено как country
или COUNTRY
?
Комментарии:
1. Это то же самое, что использовать глобальные переменные в любом другом языке. Вы должны стараться избегать их, параметры, как правило, лучше.
2. Все переменные верхнего регистра обычно зарезервированы для переменных среды.
3. @Barmar итак, подводя итог, вы говорите: сохраняйте переменную в нижнем регистре (поскольку это не переменная окружения), и лучше всего определять и передавать переменную в качестве параметра в каждой функции вместо того, чтобы полагаться на то, что она уже существует в контексте, в котором выполняется скрипт.
4. Я бы пошел дальше и посоветовал вам вообще не использовать ALLCAPS_VARS. Это слишком просто в использовании
PATH=/path/to/file; DIR=$(dirname "$PATH")
, а затем вы удивляетесь, почему ваш скрипт внезапно выдает «dirname: не найден»