shell,从下标向变量赋值

时间:2018-11-19 12:36:07

标签: shell zsh

(将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 ..我会知道为什么

感谢帮助

0 个答案:

没有答案