让我们拥有这个降价模板 tpl.md :
{{title}} {{date}}
==========
{{author}},
*{{titleFull}}*,
{{date}}
{{book}}, {{ref}}
*{{summary}}*
和脚本(其目的是询问未设置参数的值,因此将 yad 用作 gui )
#! /bin/bash
TPL="tpl.md"
# Create a template environment variable
declare -gA tev;
tev=([author]="FrViPofm" [date]=$(date +%Y%m%dT%H%M%S))
# check keys
echo "start keys: ${!tev[@]}"
# Search the placeholders
sed -e 's/}}/}}\n/g' "$TPL" | grep -0o "{{.*}}" | while read key ;do
key="${key##*\{}" # remove left
key="${key%%\}*}" # remove right
if [[ "$key" != *[[:alnum:]]* ]]; then
continue
fi
if [ -z ${tev[$key]+x} ]; then # check if set
# Ask to fill the parameter
res=$(yad --form \
--height "400" --width "700" --center \
--title "Paramètre ‘$key’..." \
--text "Veuillez renseigner le paramètre suivant" \
--field "${key^}" "_${key}_" \
--button="gtk-cancel:1" --button="gtk-ok:0" \
) || exit 1
res="${res// /♲}"
read \
val \
<<< "${res//\|/ }"
tev[$key]="${val//♲/ }"
export tev[$key]
echo "loop keys: ${!tev[@]}"
else
echo "'$key' is set to '${tev[$key]}'"
fi
done
echo "end keys: ${!tev[@]}"
在我的bash版本(4.3.48)上,脚本将按预期返回,两个键先初始化
start keys: date author
找到第一个占位符 title 时,脚本将按预期方式返回树键
....
loop keys: date author title
稍后,它将根据看到的占位符(但顺序似乎已更改)使用新的键递增结果,例如:
...
loop keys: titleFull book ref date author title
...
但是在循环之后,最后,添加的键消失了,仅保留了前两个键:
end keys: date author
使用关联数组是否有限制?是一种声明关联数组以保留其键的方法吗?
感谢您的明智...