我正在自定义我的 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 …