我正在写shell脚本,将从以下结构vars.txt获得键值:[{"key":"testvar1","value":"abc"},{"key":"testvar2", "value": "abc-de"}]
首先我想拆分这个字符串,所以我使用IFS="," read -d -r -a rows < vars.txt
但在“值”字段包含连字符时停止:echo ${rows[*]}
得到[{"key":"testvar1" "value":"abc"} {"key":"testvar2" "value": "abc
我该如何解决这个问题,以便使用完整的abc-de?
2条答案
按热度按时间vaqhlq811#
简短说明
read -d
需要一个参数,该参数的第一个字符是记录分隔符--读取记录的字符将被认为是完整的。它将-r
作为该参数,因此将-r
中的-
视为停止阅读的字符。只要不使用
-d
参数,除非您知道为什么要使用它。阅读输入,直到EOF或NUL字节
如果您的意图是告诉
read
继续运行,直到EOF或NUL,那么将''
作为-d
后面的参数传递;因此:但是要注意,除非
vars.txt
以文本NUL字符结尾,否则它将以非零状态退出。41ik7eoe2#
这不是
read
的工作,使用jq
之类的JSON解析器来提取值,使用readarray
来填充shell数组。(假设你使用的是
bash
的半现代版本,如果你使用的是macOS自带的化石版本,请安装最新版本,并首选使用该版本。