如何用Shell按竖线分割带引号的HOUSE|CAR值为两个变量?
问题解决方法
问题根源
你的命令存在两个核心问题:
- jq默认输出带双引号的字符串(如
"HOUSE|CAR"),双引号会让Shell将整个内容视为单一整体,IFS="|"无法对其分割; echo $(...)属于冗余写法,不仅无意义,还可能干扰Shell的分词逻辑。
修正后的命令
直接让jq输出无引号的原始内容,再用read按|分割:
IFS="|" read -r doc doc2 < <(callapi server:id | jq -r '.[].Documentation')
关键改动说明
jq -r:添加-r(raw output)参数,让jq输出不带双引号的原始字符串,得到HOUSE|CAR而非"HOUSE|CAR";read -r:添加-r参数避免read转义输入中的反斜杠,提升命令安全性;- 移除冗余的
echo $(...):进程替换< <(...)直接将jq的输出传递给read,无需额外处理。
验证结果
执行上述命令后,即可得到预期效果:
echo $doc # 输出:HOUSE echo $doc2 # 输出:CAR
内容的提问来源于stack exchange,提问作者Miguel7799
相关产品推荐
相关产品推荐

