В bash
, как и в ksh
, где $var
— массив, $var
на самом деле является сокращением от ${var[0]}
.
Так в:
var=([1]=whatever [2]=blah)
${var+set}
не расширится до set
, а [[ -v var ]]
вернет false, потому что $var
не имеет элемента с индексом 0 (обратите внимание, что в bash
, как и в ksh
, но в отличие от большинства других оболочки и языки, массивы — это разреженные массивы или ассоциативные массивы с ключами, ограниченными положительными целыми числами ).
В bash
(, по крайней мере, начиная с версии 4.3 ), когда вы объявляете переменную как массив с помощью:
typeset -a var
var
изначально не установлено. Он даже не установлен в пустой список. В 4.3
, typeset -p var
вернет ошибку. В версии 4.2 и раньше он выводил:
declare -a a='()'
(как если бы массиву присваивался пустой список, как вzsh
)
В 4.4 выводит:
declare -a var
Итак, начиная с версии 4.3, неустановленный (, но объявленный )массив отличается от массива, которому назначен пустой список.
Тем не менее, программно трудно провести различие между ними. Но на практике это различие не очень полезно. Скорее всего, вам нужно знать, сколько элементов в массиве:
((${#array[@]})) || echo array has no element
См. zsh
, rc
, fish
и yash
для оболочек с лучшей конструкцией решетки.
Нет, это невозможно с использованием разрешений на доступ к файлам в Linux.
Администратор/root имеет доступ к любому файлу и каталогу в вашей системе. Вы можете использовать шифрование (, например. контейнер «Люкс» ).
По определению пользователь root должен иметь полные права абсолютно на все, в системе, :если что-то пойдет не так, root должен быть надежным.
Вы можете создать группу администраторов, которую вы назначите своим системным администраторам. Затем вы можете использовать разрешения Linux для уточнения прав доступа к вашим папкам.