尝试以下操作
typeset -A note_ids
for line in ${(f)"$(listnotes)"}; do
note_ids+=(${line%% *} ${line#* })
done
-
${(f)PARAM}
:拆分扩展的结果
$PARAM
在换行符处
-
"$(listnotes)"
:将
listnotes
逐字输入扩展。
-
for line in LIST
:迭代中的项目
LIST
作为拆分依据
${(f)â¦}
。
-
note_ids+=(key value)
:将键值对添加到关联数组
note_ids
-
${line%% *}
:切割匹配的最大部分
" *"
(后跟任何内容的空格)从
line
。因此,在包含第一个空格后删除所有内容,只留下键。
-
${line#* }
:切割匹配的最小部分
"* "
(后跟三个空格的任何内容)从
$line
。因此,删除键和用作分隔符的三个空格。
而不是使用参数扩展标志
(f)
您还可以读取
列表注释
逐行显示
read
:
listnotes | while read; do
note_ids+=(${REPLY%% *} ${REPLY#* })
done
除非另有规定
阅读
将读取的值放入
REPLY
参数