【问题标题】:print newline in process substitution [duplicate]在进程替换中打印换行符[重复]
【发布时间】:2020-01-07 11:33:47
【问题描述】:

这是在 bash(5.0.3(1)-release) / ubuntu 19

我跑的时候:

printf "%s" $'\n'

它打印出一个新行。

现在当我跑步时:

result="$(printf "%s" $'\n')"
printf "<%s>" "$result"

我希望 $result 包含换行符,但它是空的。

谁能解释一下?

【问题讨论】:

  • 试试这个result="$(printf "1%s" $'\n2')"; printf "&lt;%s&gt;" "$result"
  • 我知道我们可以做到,我只是想解释一下我的帖子中发生的事情。

标签: bash


【解决方案1】:

来自posix shell manual, from chapter about process substitution,强调我的:

shell 应通过在子 shell 环境中执行命令来扩展命令替换(参见 Shell 执行环境)并将命令替换(命令文本加上封闭的“$()”或反引号)替换为命令,在替换结束时删除一个或多个 &lt;newline&gt;s 的序列

不可能使用进程替换来存储尾随换行符。您可以使用例如printf -v bash 扩展:

printf -v result "%s" $'\n'

对于大多数可移植性,我使用odxxd 将字符串编码为十六进制,并将字符串存储为十六进制。或者只是将生成的字符串存储在一个文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2015-10-16
    • 2010-11-29
    • 2012-12-15
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多