【问题标题】:How to print/echo 'alert' (07) from command prompt如何从命令提示符打印/回显“警报”(07)
【发布时间】:2021-01-16 20:39:50
【问题描述】:

在python中发出哔声,我打印控制字符07。例如:

>>> print('\x07')
# <beep>

是否可以从 shell 执行此操作?我一直在尝试这样的事情:

david$ echo \x07
x07
david$ echo '\x07'
\x07
david$ echo "\x07"
\x07

但只是按字面意思打印。除了做类似的事情之外,如何做到这一点:

$ python -c "print('\x07')"

好像printf 有效:

$ printf '\a'

还有什么方法可以用echo 做到这一点?

【问题讨论】:

标签: bash unix ascii echo control-characters


【解决方案1】:

其实很简单:

printf "\a"

打印警报/铃声字符。

echo 的问题是 POSIX 说的

如果第一个操作数是 -n,或者任何操作数包含字符,则结果是实现定义的。

事实上,如果使用内置版本(以及 哪个 shell),或者如果使用独立的echo,则取决于您的操作系统,有些人会解释反斜杠转义默认情况下,有些需要特定的选项(通常是 -e),有些(zsh)取决于 shell 选项设置的...更容易使用 printf,它总是表现对于 \a 这样的转义序列也是如此。

【讨论】:

  • 确定我自己也发现了这一点(请参阅更新的问题)。 echo 可以吗?
  • @carl.hiass 不可移植。 echo 的某些版本支持这样的反斜杠转义,有些则不支持。 printf 总是这样,使它更受欢迎。
【解决方案2】:

对于 Bash,内置的 echo 命令支持转义:

echo -ne '\a'

对于 POSIX 兼容的 shell,printf 是更好的选择:

printf '\a'

或使用 GNU 核心实用程序:

/bin/echo -ne '\a'

【讨论】:

  • 完美,谢谢。出于好奇,如何检测特定命令提示符正在使用哪个默认 shell? $ echo -e '\a' 为我工作!
  • @carl.hiass 通常检查$0 就足够了,但可能需要对每个外壳进行特定测试以涵盖边缘情况,例如$BASH_VERSION等的存在和值
  • 不要检查任何东西。只需在任何地方使用printf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2016-04-18
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多