Код: Выделить всё
[[ ! -z ${var[@]} ]] или [[ ${#ht[*]} -ne 0 ]]Код: Выделить всё
[ -n "${host:-x}" ]Модераторы: /dev/random, Модераторы разделов
Код: Выделить всё
[[ ! -z ${var[@]} ]] или [[ ${#ht[*]} -ne 0 ]]Код: Выделить всё
[ -n "${host:-x}" ]Код: Выделить всё
$ ( arr=( ); echo "'${arr[*]:+x}'"; )
''
$ ( arr=( '' ); echo "'${arr[*]:+x}'"; )
'x'
$ ( arr=( '1' ); echo "'${arr[*]:+x}'"; )
'x'Код: Выделить всё
IFS=$'\xa'
arr='1
2
3'Приведенной команде полностью тождественна команда false.lgar писал(а): ↑29.07.2012 19:50хочется что-то подобное. такое возможно?Код: Выделить всё
[ -n "${host:-x}" ]
В bash это понятие практически бессмысленно, ибо любая «несуществующая» переменная ведет себя как пустой массив. Но если очень хочется, то
Код: Выделить всё
if set | grep ^VARNAME=\( >/dev/null; then
echo "VARNAME exists"
else
echo "VARNAME doesn't exist"
fiВообще-то, можно не шибко извращаться-то. "${#arr[@]}" раскрывается в длину массива. Т.е. что-то вроде:
Код: Выделить всё
if [ "${#arr[@]}" -gt 0 ]; then
echo "arr is not empty"
else
echo "arr is empty"
fiwatashiwa_daredeska писал(а): ↑29.07.2012 20:58В bash это понятие практически бессмысленно, ибо любая «несуществующая» переменная ведет себя как пустой массив. Но если очень хочется, тоКод: Выделить всё
if set | grep ^VARNAME=\( >/dev/null; then echo "VARNAME exists" else echo "VARNAME doesn't exist" fi
Код: Выделить всё
$ declare -pa | grep VARwatashiwa_daredeska писал(а): ↑29.07.2012 20:58Вообще-то, можно не шибко извращаться-то. "${#arr[@]}" раскрывается в длину массива. Т.е. что-то вроде:Код: Выделить всё
if [ "${#arr[@]}" -gt 0 ]; then echo "arr is not empty" else echo "arr is empty" fi
Код: Выделить всё
[ -n "${arr[*]}" ] ...Да, про declare я забыл, только grep тут надо поточнее: declare -pa | grep " VAR=", или вообще так: declare -p VAR | grep '^declare -a'.
Не получится. "${arr[*]}" будет содержать $IFS в количестве ${#arr[@]} - 1. Тогда уж { k="${arr[@]}"; [[ $((${#arr[@]} - 1)) == ${#k} ]]; }sgfault писал(а): ↑29.07.2012 21:07И, действительно, проверить есть ли непустые элементы в массиве можно просто с помощью
Код: Выделить всё
[ -n "${arr[*]}" ] ...
watashiwa_daredeska писал(а): ↑29.07.2012 23:11Да, про declare я забыл, только grep тут надо поточнее: declare -pa | grep " VAR=", или вообще так: declare -p VAR | grep '^declare -a'.
watashiwa_daredeska писал(а): ↑29.07.2012 23:11Не получится. "${arr[*]}" будет содержать $IFS в количестве ${#arr[@]} - 1. Тогда уж { k="${arr[@]}"; [[ $((${#arr[@]} - 1)) == ${#k} ]]; }sgfault писал(а): ↑29.07.2012 21:07И, действительно, проверить есть ли непустые элементы в массиве можно просто с помощью
Код: Выделить всё
[ -n "${arr[*]}" ] ...
Код: Выделить всё
$ ( IFS=''; f() { [ -z "${arr[*]}" ] && echo bu; }; arr=( ); f; arr=( '' ); f; arr=( '' '' ); f; )
bu
bu
bu