В скриптах bash:
мы создаем переменную, просто называя ее:
abc=ok
или мы можем использовать declare
declare abc=ok
какая разница?
и почему bash делает так много способов создать переменную?
bash
shell-script
variable
lovespring
источник
источник
declare
делает имена локальными, как сlocal
командой.-g
Опция подавляет такое поведение. Смhelp declare
.declare
позволяет создавать ассоциативные массивы, целые числа и переменные только для чтения. Кроме того, он расширяет свои аргументы, поэтому такие вещиdeclare $name=1
возможны.Ответы:
От
help -m declare
:Таким образом,
declare
используется для установки значений переменных и атрибутов .Позвольте мне показать использование двух атрибутов на очень простом примере:
Из приведенного выше примера, я думаю, вы должны понимать использование
declare
переменной над обычной переменной! Этот тип действияdeclare
полезен в функциях, в циклах со сценариями.Также зайдите в Переменные ввода: объявите или наберите
источник
abc=ok
присваивает значение переменнойabc
.declare abc
объявляет переменную с именемabc
. Два могут быть объединены какdeclare abc=ok
.В bash, как и в других оболочках, переменные строк и массивов не нужно объявлять, поэтому
declare
нет необходимости, если вы не хотите передавать параметры, например,declare -A abc
чтобы создатьabc
ассоциативный массив илиdeclare -r
сделать переменную доступной только для чтения. Тем не менее, внутри функцииdeclare
имеет значение: она вызывает переменную, чтобы быть локальной для функции, то есть значение переменной за пределами функции (если таковые имеются) сохраняется. (Если только вы не используетеdeclare -g
, что делает переменную не локальной, это полезно в сочетании с другими параметрами, например,declare -gA
для создания глобального ассоциативного массива в функции.) Пример:Выход:
Еще одна вещь, которую вы можете сделать с помощью
declare
встроенногоdeclare
Встроенный является уникальной для Баша. Он сильно вдохновлен и очень близок кtypeset
встроенному в ksh , а bashtypeset
является синонимомdeclare
совместимости. (Я не знаю, почему Bash не просто назвал этоtypeset
). Есть третий синонимlocal
. Кроме тогоexport
, есть то же самое, чтоdeclare -x
и для совместимости (с каждой оболочкой в стиле Борна).источник
export
,local
иdeclare
является наиболее совместимым с другими оболочками?export
существует во всех вариантахsh
.local
существует только в bash и zsh,declare
только в bash.typeset
существует в ksh, bash и zsh.