z
или zt
помещает текущую строку в вершину экрана (
== Войдите),
z.
или zz
помещает текущую строку в центр экрана
z-
или zb
помещает текущую строку в нижнюю часть экрана
(z
, z.
, и z-
помещает курсор в первое не пустой столбец. zt
, zz
, и zb
оставляет курсор в текущем столбце),
Больше информации о прокрутке по http://vimdoc.sourceforge.net/htmldoc/scroll.html или
в типе энергии :help scroll-cursor
Я заметил, что for x in $d
пропускает пустые строки:
VAR1=a
VAR2=
VAR3=c
d=("$VAR1" "$VAR2" "$VAR3")
for x in $d; do
echo $x
done
a
c
(обратите внимание на отсутствие пустой строки между a
и c
)
Используя bash- и ksh-совместимое расширение массива, "${d[@]}"
, кажется, делает трюк:
VAR1=a
VAR2=
VAR3=c
d=("$VAR1" "$VAR2" "$VAR3")
for x in "${d[@]}"; do
echo $x
done
a
c
Таким образом, ваш скрипт мог бы сделать:
#!/usr/bin/env zsh
d=("$VAR1" "$VAR2" "$VAR3")
undefined_variables=false
for x in "${d[@]}"; do
if [[ -z "${x}" ]]; then
undefined_variables=true
break
fi
done
if $undefined_variables; then
echo "Found some undefined variables"
fi
Также обратите внимание, что форма for x in $d
предполагает, что опция KSH_ARRAYS
не установлена, что может быть не всегда верно.
В качестве альтернативы, вы можете установить массив на имена переменных, а не на значения, а затем использовать "nameref" внутри цикла. В этом случае цитирование будет проще, и вы сможете увидеть, какие переменные были отменены.
#!/usr/bin/env zsh
VAR1=a
VAR2=b
VAR3=
vars=(VAR1 VAR2 VAR3)
undefined_variables=false
for var in $vars; do # or 'for var in "${vars[@]}"' if KSH_ARRAYS might be on
if [[ -z "${(P)var}" ]]; then
echo "$var is empty"
undefined_variables=true
fi
# alternatively to test for defined variable as opposed to empty:
if ((! ${(P)+var})); then
echo "$var is not set"
undefined_variables=true
fi
done
Чтобы проверить, содержит ли массив хотя бы один пустой элемент, можно сделать так:
if ((i = array[(I)])); then
echo "array contains at least one empty element (${i}th)"
else
echo "array doesn't contain empty elements"
fi
Флаг (I)
subscript в $array[(I)pattern]
возвращает индекс последнего элемента, который соответствует pattern
или 0
, если не найден.
Или вы можете подсчитать количество пустых элементов с помощью:
if ((n = ${(M)#array[@]:#})); then
echo "array contains $n empty elements"
else
echo "array doesn't contain any empty element"
fi
${(M)array[@]:#pattern}
расширяется до элементов, соответствующих pattern
. Добавление #
дает счетчик.