(将zsh与以下内容配合使用)
# i=for loop ((i;i<l,i++))
typeset -A _opts
AILABLE_ARG_OPTS=('v|verbose' 0 'd|destination' 1)
currentOpt=("${(@s/=/)${@[$i]##*-}}")
for k v in ${(kv)AVAILABLE_ARG_OPTS}; do
if (( $v != 0 )); then
_opts[${k#*|}]=$([[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <---------------------------- HERE ?
)
fi
done
在“ HERE”处,$ i使用正确的值,但未为循环设置增量。
-我有替补球员吗?
-变量是否成为只读的内部子执行?
编辑添加相同样式的问题。
_opts[${k#*|}]=${currentOpt[2]:-"${@[$((++i))]}"}
在所有情况下对第二条语句进行评估是否“正常”? 是否设置了$ currentOpt [2]
编辑:(作为评论答案)
_opts[${k#*|}]=$(
[[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <--------------------- $i is not incremented
)
“ ~~ equivalent ~~”(表示该增量。)
if [[ -v currentOpt[2] ]]; then
_opts[${k#*|}]="${currentOpt[2]}"
else
_opts[${k#*|}]="${@[$((++i))]}" # <-------- $i is incremented
fi
我不明白的一点,在两种情况下都将正确的值设置为_opts[$k]
。
但是在第一个示例中,$((++i))
不会将其值分配给$i
..我会知道为什么
感谢帮助