Dado que tiene dos monitores y no necesita espacio de trabajo, sugeriré desactivar los atajos para "Mover al espacio de trabajo arriba/abajo":
De hecho, deshabilité todos los accesos directos relacionados con el espacio de trabajo...
Это зависит от того, была ли соответствующая переменная уже объявлена ранее в текущей области видимости (верхнем -уровне, также известном как глобальная или текущая функция ).
Если она не была объявлена в текущей области видимости (и имейте в виду, что в области видимости верхнего -уровня переменная может быть объявлена ( и назначена )путем импорта из среда ), затем он объявляет его (делает его локальным для функции, когда он находится в области действия функции ), присваивая ему тип, но не инициализируя его, даже в пустой список(declare -p a
показывает declare -a a
, а не declare -a a=()
, как если бы вы объявили и/или присвоили его с помощьюa=()
).
Если он уже был объявлен в текущей области видимости (, например, потому что он был импортирован как скалярная переменная из среды в глобальной области видимости ), тогда declare -a a
попытается преобразовать его в массив.
Если ранее он был скаляром, то он становится ([0]=value-of-the-variable)
массивом. Если это уже был массив, он остается нетронутым. Если это был ассоциативный массив, произойдет сбой с ошибкой cannot convert associative to indexed array
.
Обратите внимание, что declare a
не будет преобразовывать массив или хэш в скаляр. bash
все равно не сможет преобразовать хэш/массив в скаляр. Вы можете использовать declare +aA a
для принудительного скаляра (, который завершится с ошибкой, если переменная ранее была хэшем/массивом в текущей области ).
В вашем случае переменная, вероятно, еще не была объявлена в текущей области видимости,поэтому он оказался объявленным, но не назначенным, что объясняет, почему попытка его расширения не удалась в set -u
.
Это различие между двумя объявленными и назначенными / наборами состояниями переменной не относится к bash
. В POSIX sh
вы также можете export
создать переменную или сделать ее readonly
, не присваивая ей значения.
$ sh -uc 'unset -v var; readonly var; : "$var"'
sh: 1: var: parameter not set
Обратите внимание, что unset
одновременно сбрасывает и отменяет объявление переменной. В bash
, mksh
и yash
он может восстановить переменную из внешней области.
В zsh
, за исключением sh
эмуляции, использование typeset
для объявления переменной и установки ее в пустое значение, если она еще не была установлена или была установлена, но из другого типа (скаляр против массива против ассоциативного массива ).