繁体   English   中英

读取 Bash 中的键值对,其中值包含分隔符

[英]Reading key-value pair in Bash where value contains delimiter

当值部分可能在值中包含分隔符时,如何将键值对文件读入关联数组? 因此,在第一次出现分隔符时拆分行,并存储在关联数组中。

示例 KVP 文件内容:

key=value
key1=[SHA:]$value()%_&+=

我想做类似的事情

KVP_FILE="./file.properties"
declare -A keyvals
while read line; do 
 ??
 keyvals[$key]="$value"
done < $KVP_FILE

这是一个损坏的代码示例,它丢失了上面文件示例中key1中的尾随=

while IFS=$'=' read key value; do
     [[ $key = [#!]* ]] || [[ $key = "" ]] && continue;
     keyvals[$key]=$(echo "$value" | sed 's/[\/&]/\\&/g')
   done < $SFILE

您可以使用参数扩展来删除以第一个=开头的所有内容作为键,以及第一个=开始的所有内容作为值:

declare -A keyvals

while IFS= read -r line; do
    keyvals["${line%%=*}"]=${line#*=}
done < "$KVP_FILE"

使用sed将第一个分隔符替换为换行符。 然后一次读两行。

KVP_FILE="./file.properties"
declare -A keyvals
while read -r key && read -r value; do 
   keyvals[$key]="$value"
done < <(sed 's/=/\n/' "$KVP_FILE")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM