问题描述
在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
做到这一点吗?
解决方法
其实很简单:
printf "\a"
打印闹钟/铃声字符。
echo
的问题在于 POSIX 说
如果第一个操作数是 -n,或者任何一个操作数包含一个字符,则结果是实现定义的。
而且,事实上,如果使用内置版本(以及哪个 shell),或者您的操作系统(如果使用独立的echo
),有些人会解释默认情况下反斜杠转义,有些需要特定的选项(通常是 -e
)才能这样做,有些(zsh
)取决于 shell 选项的设置……使用 {{1 }},对于像 printf
这样的转义序列,它的行为总是相同的。
对于 Bash,内置的 echo
命令支持转义:
echo -ne '\a'
对于符合 POSIX 的 shell,printf
是更好的选择:
printf '\a'
或者使用 GNU 核心实用程序:
/bin/echo -ne '\a'