小编dtk*_*dtk的帖子

防止命令替换删除尾随换行符的优雅方法

我正在自定义我的 zshPROMPT并调用一个函数,该函数可能是也可能不是echo基于环境变量状态的字符串:

function my_info {
    [[ -n "$ENV_VAR"]] && echo "Some useful information\n"
}

local my_info='$(my_info)'

PROMPT="${my_info}My awesome prompt $>"
Run Code Online (Sandbox Code Playgroud)

我希望信息以尾随换行符结尾,这样如果设置了它,它就会出现在自己的行上:

Some useful information
My awesome prompt $>
Run Code Online (Sandbox Code Playgroud)

但是,如果未设置,我希望提示在一行上,避免提示中由无条件换行引起的空行:

PROMPT="${my_info}  # <= Don't want that :)
My awesome prompt $>"
Run Code Online (Sandbox Code Playgroud)

目前,我$(command substitution)通过使用非打印字符作为后缀来解决删除换行符的问题,因此换行符不再尾随:

[[ -n "$ENV_VAR"]] && echo "Some useful information\n\r"
Run Code Online (Sandbox Code Playgroud)

这显然是一个黑客。有没有一种干净的方法来返回以换行符结尾的字符串?

编辑:我明白是什么导致了尾随换行符丢失以及为什么会发生这种情况,但在这个问题中,我特别想知道如何防止这种行为(我认为这种解决方法不适用于我的情况,因为我是寻找“条件”换行符)。

编辑:我更正了:引用的解决方法实际上可能是一个相当不错的解决方案(因为比较中的前缀字符串是一种常见且有些相似的模式),但我无法使其正常工作:

echo "Some useful information\n"x
  [...]
PROMPT="${my_info%x}My awesome prompt $>"
Run Code Online (Sandbox Code Playgroud)

不会x …

prompt zsh function command-substitution newlines

7
推荐指数
1
解决办法
1302
查看次数

标签 统计

command-substitution ×1

function ×1

newlines ×1

prompt ×1

zsh ×1