我想用echo
在 bash 中打印出一串字符,后跟一个回车符。我浏览了手册页并发现echo -e
将使echo
解释反斜杠转义字符。用它我可以说echo -e 'hello\r'
它会像这样打印
$>echo -e 'hello\r'
hello
$>
所以看起来它正确地处理了回车。我还发现echo -n
在手册页中将停止echo
插入换行符,看起来当我这样做时它可以工作
$>echo -n 'hello\r'
hello\r$>
我遇到的问题是将两者结合起来-e
and -n
。我已经尝试过每一个echo -e -n 'hello\r'
, echo -n -e 'hello\r'
, echo -en 'hello\r'
, and echo -ne 'hello\r'
并没有像这样打印任何内容:
$>echo -ne 'hello\r'
$>
我在这里缺少什么吗?或者可以吗?-e
and -n
选项不能一起使用?
我认为它正在发挥作用,只是你没有看到它。这是你的命令:
$> echo -ne 'hello\r'
因为回车(\r
),这会将光标留在终端上写入的同一行的开头hello
- 这意味着这就是输出到终端的下一个内容将被写入的地方。因此,如果您的实际提示比$>
你在这里显示,它将覆盖hello
完全地。
此序列将让您了解实际发生的情况:
echo -ne 'hello\r'; sleep 5; echo 'good-bye'
但为了更好地移植到其他 shell,我会避免使用选项echo
像那样。这些纯粹是 bashism,不受 POSIX 标准支持。这printf
然而,builtin 是由 POSIX 指定的。因此,如果你想显示没有换行符的字符串并解析反斜杠序列,你可以使用它:
printf '%s\r' 'hello'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)