如何使用 将String
以下内容分成对?key-value
bash
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'"