使用while read line循环处理文件时如何正确保留转义引号?
解决方案
方案1:修正read命令参数
反斜杠丢失是read命令的默认行为导致的:默认read会将反斜杠识别为转义符进行处理,同时会自动截断首尾空白。只需要调整两个参数即可解决问题:
- 给
read添加-r参数:禁用反斜杠转义功能,保留原始的反斜杠字符 - 前置
IFS=:清空输入字段分隔符,避免read自动修剪行首行尾的空白
正确写法示例:
# 保留转义符正常输出 while IFS= read -r line; do echo "${line}" done < input.txt # 直接对接jq提取字段 while IFS= read -r line; do desc=$(echo "${line}" | jq '.desc' -r) echo "${desc}" done < input.txt
方案2:直接用jq处理整份文件(更简洁)
你的输入属于标准的JSON Lines格式(每行一个独立JSON对象),jq原生支持直接读取处理这类文件,完全不需要写循环逐行读取,一行命令即可完成处理:
# 直接提取所有行的desc字段 jq '.desc' -r input.txt
执行后直接输出预期结果:
Necklace 18" long Necklace 18" long
内容的提问来源于stack exchange,提问作者Beweeted
相关产品推荐
相关产品推荐

