将逗号分隔的key = value对的字符串存储为$ key,$ value变量在shell中

Nar*_*esh 3 bash dictionary

在我的bash shell脚本中,我有一个逗号分隔的键,值对以单个字符串的形式.如何在单独的变量中解析和存储每个键和值.
例如,
string1="key1=value1,key2=value2"

我想将其转换为,
echo 'key1 = value1' >> key1.txt echo 'key2 = value2' >> key2.txt
string1中键,值对的数量将是动态的.如何在shell脚本中执行此操作?
我用cut来获得关键和价值.但我不确定如何循环使用字符串中的数字对.

string1='key1=value1'
KEY=$(echo $string1 | cut -f1 -d=)
VALUE=$(echo $string1 | cut -f2 -d=)
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 5

#!/bin/bash

string1="key1=value1,key2=value2"

while read -d, -r pair; do
  IFS='=' read -r key val <<<"$pair"
  echo "$key = $val"
done <<<"$string1,"
Run Code Online (Sandbox Code Playgroud)

请注意尾随,输入"$string1,",这确保了使用最后分隔的标记read进入while循环体. ,

收益率:

key1 = value1
key2 = value2
Run Code Online (Sandbox Code Playgroud)

要将键值对写入顺序编号的文件(key<n>.txt,以...开头1):

#!/bin/bash

string1="key1=value1,key2=value2"

i=0
while read -d, -r pair; do
  IFS='=' read -r key val <<<"$pair"
  echo "$key = $val" > "key$((++i)).txt"
done <<<"$string1,"
Run Code Online (Sandbox Code Playgroud)

  • @ Naresh,在bash> = 4中,如果你需要在代码中稍后使用键/值对,你也可以将值加载到*关联数组*(例如`declare -A pairs`,然后在循环内你可以简单地做`pair [$ key] ="$ val"`来构建`pairs`数组) (2认同)