如何为Bash关联数组中选中方案的各颜色值分配变量?
Bash脚本配色方案变量赋值实现方法
先修正你原脚本里的逻辑问题,再给出颜色变量的具体赋值方案:
1. 先校验用户输入的合法性
用户选的配色方案可能不在定义范围内,先做校验避免后续出错:
# 检查输入的方案是否存在于关联数组中 if [[ ! -v assscheme[$color] ]]; then echo "错误:不存在配色方案 $color" exit 1 fi
2. 将选中方案的颜色拆分到指定变量
因为你的每个配色方案都是固定顺序的三个颜色(对应red、blue、white),直接用read命令拆分字符串即可:
# 取出选中方案对应的颜色字符串 selected_colors="${assscheme[$color]}" # 按空格拆分到对应变量 read red blue white <<< "$selected_colors"
3. 修改后的完整脚本片段
#!/usr/bin/env bash ... (脚本初始部分) ... declare -A assscheme mapfile -t inscheme < schemes for val in "${inscheme[@]}"; do key=${val%%=*} value=${val#*=} assscheme[$key]=$value done # 可选:列出所有可用方案供用户参考 echo "可用配色方案:${!assscheme[@]}" read -p "选择配色方案:" color # 校验输入合法性 if [[ ! -v assscheme[$color] ]]; then echo "错误:不存在该配色方案" exit 1 fi # 拆分颜色到指定变量 read red blue white <<< "${assscheme[$color]}" # 后续命令直接调用变量即可 magick ......... -fill "$red" ........... script1 .......... -b "$blue" ........... script2 .......... -o "$white" .......... ... (脚本后续部分) ...
另一种可选方式:用索引数组存储颜色
如果不需要固定命名的变量,也可以把颜色存到索引数组里,通过下标调用:
colors=(${assscheme[$color]}) # 第一个颜色用${colors[0]},第二个用${colors[1]},第三个用${colors[2]} magick ......... -fill "${colors[0]}" ........... script1 .......... -b "${colors[1]}" ...........
关键说明
- 原脚本里的
if [[ "$key" == "$color" ]]逻辑错误,$key是循环最后一次迭代的键值,无法匹配用户选择的方案,换成合法性校验逻辑更可靠。 read命令通过<<<将字符串作为输入,自动按空格拆分到多个变量,完美适配你的schemes文件格式。
内容的提问来源于stack exchange,提问作者batjka911
相关产品推荐
相关产品推荐

