首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash和zsh和zsh-subshell在新行处理中的差异

bash和zsh和zsh-subshell在新行处理中的差异
EN

Stack Overflow用户
提问于 2022-09-29 16:48:57
回答 1查看 95关注 0票数 0

我试图使用将字符串格式化为JSON使用jq,并且我注意到bash上的不同行为;特别是当zsh直接运行jq时,结果与它在子subshell中运行时的结果不同:在第一种情况下,\n输入以\\n的形式输出,而在后一种情况下,以\n的形式获得输出。

我很困惑,也不知道那是怎么回事:

  • 这是已知的zsh行为吗?
  • 这是一个jq错误吗?
  • 还是按照设计的方式工作而我却遗漏了什么?

顺便说一句:与jq一起使用换行符建议使用printf %b来获取\n,而不是\\n,后者适用于bash。但各模式之间的zsh差异仍然存在。

代码语言:javascript
复制
$ jq --version
jq-1.6

# ---
# Using \n directly

bash-3.2$        jq --null-input --compact-output --raw-output --monochrome-output --arg test 'A\nB' '{test: $test}'
{"test":"A\\nB"}
bash-3.2$  OUT=$(jq --null-input --compact-output --raw-output --monochrome-output --arg test 'A\nB' '{test: $test}'); echo $OUT
{"test":"A\\nB"}


zsh-5.8.1>       jq --null-input --compact-output --raw-output --monochrome-output --arg test 'A\nB' '{test: $test}'
{"test":"A\\nB"}
zsh-5.8.1> OUT=$(jq --null-input --compact-output --raw-output --monochrome-output --arg test 'A\nB' '{test: $test}'); echo $OUT
{"test":"A\nB"}

# -----
# Using `printf %b` to convert `\n` to real newline

bash-3.2$        jq --null-input --compact-output --raw-output --monochrome-output --arg test "$(printf %b 'A\nB')" '{test: $test}'
{"test":"A\nB"}
bash-3.2$  OUT=$(jq --null-input --compact-output --raw-output --monochrome-output --arg test "$(printf %b 'A\nB')" '{test: $test}'); echo $OUT
{"test":"A\nB"}


zsh-5.8.1>       jq --null-input --compact-output --raw-output --monochrome-output --arg test "$(printf %b 'A\nB')" '{test: $test}'
{"test":"A\nB"}
zsh-5.8.1> OUT=$(jq --null-input --compact-output --raw-output --monochrome-output --arg test "$(printf %b 'A\nB')" '{test: $test}'); echo $OUT
{"test":"A
B"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-29 16:58:22

printf行为在两个shell之间是相同的,所有与jq调用相关的shell扩展都是相同的--但是默认的echo行为不同。

您可以通过从echo切换到printf来避免这种情况。

代码语言:javascript
复制
% OUT=$(jq --null-input --compact-output --raw-output --monochrome-output --arg test "$(printf %b 'A\nB')" '{test: $test}')
% printf '%s\n' "$OUT"
{"test":"A\nB"}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73899110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档