如何将键值字符串拆分为数组对?

如何将键值字符串拆分为数组对?

如何使用 将String以下内容分成对?key-valuebash

SOURCE="'key1=val 1' 'key2=val 2'"

我的输出目标是:

key1=val 1
key2=val 2
  • 我只能输入单个字符串作为变量
  • 我无法将变量传递为大批
  • 我只想按原样输出键值对
  • 我想尊重引号,因为我不知道如何分隔键值对
  • 我的键从不包含空格,但值会包含空格

答案1

我知道您可以自由定义SOURCE格式,因此您可以确保两个定义之间始终有空格。在这种情况下,您可以删除开头和开头处的刻度,并' '用换行符替换所有出现的 :

echo "$SOURCE" | sed "s/^'//;s/'$//;s/' '/"'\
'/g

请注意,我需要从双引号切换到单引号来引用换行符。

如果您还想消除逃逸蜱虫的反弹,请执行以下操作

echo "'key1=foo bar' 'key2=I\'m okay'" | sed "s/^'//;s/'$//;s/' '/"'\
'"/g;s/\\\\'/'/g"

使此失败的一个例子是SOURCE="'key1=foo\' ' 'key2=bar'"

相关内容