Различия между объявлением, набором и локальной переменной в Bash
При вводе переменных в Bash в чем разница между declare
и typeset
? При использовании внутри функции: в чем разница между declare
и typeset
и local
?
Единственная разница, с которой я столкнулся, заключается в том, что набор носителей переносится на скрипты ksh. Кроме того, есть ли какие-либо причины, по которым нужно быть предпочтительнее другого?
UPDATE: добавлен вопрос local
.
Ответы
Ответ 1
- Разница между
typeset
и declare
:
Первый более портативный (например, ksh), в то время как последний предпочтительнее, когда переносимость не вызывает беспокойства.
- Разница между
declare
(или typeset
) и local
при использовании внутри функции:
Первое подразумевает последнее, но более мощное. Например, declare -i x
делает x
атрибутом integer
, declare -r x
делает x
только для чтения и т.д.
Ответ 2
Что касается bash, нет, нет никакой разницы. Фактически, в manpage они имеют одно и то же определение
объявить [-aAfFilrtux] [-p] [name [= value]...]
typeset [-aAfFilrtux] [-p] [имя [= значение]...]
Объявить переменные и/или дать им атрибуты. Если имена не указаны после этого отображают значения переменные. Будет отображена опция -p атрибуты и значения каждого имя...
Я также нашел этот маленький лакомый кусочек, который еще раз подтверждает мою претензию, а также переносимость ksh
, о которой вы упомянули.
Объявить или набрать встроенные значения, , которые являются точными синонимами, позволяют модифицировать свойства переменных. Это очень слабая форма набора текста [1] доступно в некоторых программах языки. Команда declare специально для версии 2 или новее Bash. Команда набора также работает в сценариях ksh.
Ответ 3
В руководстве Bash в разделе 4.2 Bash Встроенные команды в нем указано:
'набрана'
typeset [-afFrxi] [-p] [ИМЯ [= VALUE]...]
Команда 'typeset' поставляется для совместимости с Korn оболочка; однако он устарел в пользу "объявления", встроенная команда.