【问题标题】:Bash variable- embedded newline at end of variableBash 变量 - 在变量末尾嵌入换行符
【发布时间】:2015-08-31 18:16:31
【问题描述】:

我已阅读Trying to embed newline in a variable in bash,并且我认为我理解换行符作为 IFS,以及 bash 有时如何将换行符更改为空格,但我不明白这种情况:

[prompt]$ blah="$(printf "hi\n\n\n\n")"
[prompt]$ echo "$blah"
hi
[prompt]$ blah="$(printf "hi\n\n\n\nx")"
[prompt]$ echo "$blah"
hi



x

为什么第一个 echo 没有吐出一堆换行符?谢谢。

【问题讨论】:

  • 您可以使用printf -v blah "hi\n\n\n\n"blah=$'hi\n\n\n\n' 完全避免命令替换。
  • 对于那些在家关注的人,您可以通过执行man bash 并搜索dollar 来了解$'string' 语法。返回一个页面以阅读所有相关信息。

标签: bash


【解决方案1】:

因为这就是the spec 所说的shell 应该做的事情。即去除换行符的尾随序列。

来自规范(强调我的):

shell 应通过在子 shell 环境中执行命令来扩展命令替换(参见 Shell 执行环境)并将命令替换(命令文本加上封闭的“$()”或反引号)替换为命令,在替换结束时删除一个或多个 换行符字符的序列。输出结束前嵌入的 newline 字符不应被移除;但是,它们可能被视为字段分隔符并在字段拆分期间被消除,具体取决于 IFS 的值和有效的引用。如果输出包含任何空字节,则行为未指定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2020-08-25
    • 2022-11-16
    • 2011-11-05
    相关资源
    最近更新 更多