我正在尝试使用 i2c 总线将我的 rasberry Pi 连接到某个显示器。 开始时,我想手动写入一些内容,特别是字节到文件中。 https://unix.stackexchange.com/questions/55767/how-do-you-write-specific-bytes-to-a-file 我已经读过那篇文章,我想我的问题应该可以通过类似这样的方法解决
echo -n -e \x66\x6f\x6f > byteFileForNow
然而,当我用 nano 打开该文件时,我看到的不是 foo,而是
x66x6fx6f
因此,反斜线被转义了,但字节本身没有被转义。我还尝试了同样的方法,只是这次没有-e,所以我本来以为会看到 (x66/x6f/x6f),但结果和以前一样。
因此,echo 正在转义反斜线、单独转义反斜线和反斜线,而不管它是否应该这样做。
有办法解决这个问题吗?
根据 man-page 的说明,这应该能达到我想要的效果。
每条命令的在线手册中都有大量信息;在放弃并提出问题之前,不妨先看看这些信息。
man echo
解释了哪些转义序列是允许的。下面是摘录。
如果 -e 有效,下列序列将被识别: >; \0NNN ASCII 码为 NNN(八进制)的字符 >; 反斜杠 反斜杠 警报(BEL) 反斜杠 \b backspace >; c 不再产生输出 >; f form feed >; \n new line >; \r 回车 >; 水平制表符 >; 垂直制表符
所以 \x86 是不正确的。必须是八进制,并将字符串放在双引号中,否则会被 shell 解释。
例如
$ echo -e -n "\033\07\017" >tf
$ od -c tf
0000000 033 \a 017
0000003
编辑 1
正如 Ouki 提醒我的那样,echo 也是 shell 的内置函数,所以相关信息可以在 bash 的手册页面 "man bash "中找到。但是,在字符串周围使用引号"
以阻止 shell 解释反斜线。
echo [-neE] [arg ...]。
输出参数,用空格分隔,后面加换行符。 返回状态总是 如果指定了 -n,则尾部换行符被抑制。 如果给定 -e 选项 可以解释以下反斜线转义字符。 选项-E 会禁用对这些转义字符的解释,即使在默认解释这些字符的系统中也是如此。 默认解释这些转义字符。 xpg_echo shell 选项可用于动态决定 echo不会将 -- 表示选项的结束。echo 会解释下列转义序列: \a 警报(铃声) \b backspace \c 抑制进一步输出 \e 转义字符 \f 换页 换行 r 回车 水平制表符 垂直制表符 反斜线 0nnn 八位字符,其值为八进制值 nnn(零到三位八进制数 其) 其值为十六进制值 HH 的八位字符(一个或两个十六进制数字 其)