Обратите внимание, что инструкция declare
не сбрасывает существующее значение, даже если добавлен флаг -i
, существующее значение может стать недействительным.
Флаг -i
влияет только на присвоение значения.
declare -- a='hello'
typeset -p a
declare -- a="hello"
echo "$a"
hello
declare -i a # no reset of value, but adds the -i flag
typeset -p a
declare -i a="hello"
echo "$a" # a still contains "hello" despite the -i flag
hello
a='world' # but a new value assignment will be filtered by the -i flag
typeset -p a
declare -i a="0"
echo "$a"
0
Поведение флага массива -a
несколько отличается:
unset a
a=
typeset -p a # a contains an empty string
declare -- a=""
declare -a a # the -a flag converts the existing value to an entry even if the string is empty
typeset -p a
declare -a a=([0]="")
Подводя итог: флаг -i
преобразует значение только во время присваивания. Флаг -a
также преобразует значение во время объявления.