Я работаю со сценарием bash со следующим синтаксисом
$ declare -a THIS[*]
Это кажется незаконным в zsh (я получаю ошибку «совпадений не найдено: ЭТО [*]»). Может ли кто-нибудь помочь мне перевести это на zsh?
Кроме того, что означает синтаксис [*]
? (Я знаю, что мы объявляем массив, но почему [*]?)
обновить
Чтобы привести пример использования кода и объяснить, насколько он действителен, я скопировал несколько строк из сообщения Эрика Энгстрома на ssh без пароля
declare -a SSSHA_KEYS[*]
# --- PARSE ARGS --- #
sssha_parse_args() {
local OPTIND=1
while getopts "xe:k:t:" OPT; do
#echo "$OPT $OPTARG $OPTIND"
case $OPT in
t) SSSHA_ARGS="-t $OPTARG" ;;
e) SSSHA_ENV="$OPTARG" ;;
k) [ -f "${OPTARG}" ] && SSSHA_KEYS[${#SSSHA_KEYS[*]}]="$OPTARG" ;;
x) SSSHA_STOP_ON_EXIT=$OPT
esac
done
shift $(($OPTIND - 1))
# set default key, if none specified
if [ -z "${SSSHA_KEYS[*]}" ]; then
for key in $HOME/.ssh/id_[rd]sa; do
[ -f "$key" ] && SSSHA_KEYS[${#SSSHA_KEYS[*]}]="$key"
done
fi
}
Я считаю, что [*]
используется как своего рода динамический итератор (поскольку мы не знаем, сколько элементов у него будет позже). Я просто хотел бы узнать об эквивалентном объявлении в zsh!
declare -a SSSHA_KEYS
. Доверяя объяснению @ormaaj, эти объявления должны быть равными. Другой выложенный код, скорее всего, будет работать без модификаций, кромеSSSHA_KEYS[${#SSSHA_KEYS[*]}]=smth
: он собирается добавить ключ, я прав? ИспользуйтеSSHA_KEYS+=( smth )
, так как индексы массива zsh начинаются с 1, аARR[ARR_LENGTH]
будет назначаться последнему элементу, а не после него. - person ZyX   schedule 17.04.2012