Mar*_*ark 63 shell character-encoding echo quoting
我正在尝试使用 i2c 总线将我的 rasberry Pi 连接到某些显示器。首先,我想手动写入内容,特别是字节到文件。 如何将特定字节写入文件? 我已经读过那个,我认为我的问题应该通过这样的方式解决
echo -n -e \x66\x6f\x6f > byteFileForNow
Run Code Online (Sandbox Code Playgroud)
然而,当我打开了纳米该文件,而不是富我看到:
x66x6fx6f
所以反斜杠被转义了,而不是字节本身。这次我也只在没有-e 的情况下尝试了相同的方法,所以我本来希望看到\x66\x6f\x6f,但结果和以前一样。
因此,echo 正在转义反斜杠、单独的反斜杠和反斜杠,而不管它是否应该这样做。
知道如何解决这个问题吗?
根据应该已经完成我正在寻找的手册页。
rus*_*ush 86
您必须将代码放入引号中:
echo -n -e '\x66\x6f\x6f' > byteFileForNow
Run Code Online (Sandbox Code Playgroud)
否则会导致外壳内容替换\x到x它去之前echo -e。
附:双转义也可以工作:
echo -n -e \\x66\\x6f\\x6f > byteFileForNow
Run Code Online (Sandbox Code Playgroud)
在外壳中,您可以使用printf:
printf "%b" '\x66\x6f\x6f' > file.bin
Run Code Online (Sandbox Code Playgroud)
注意:%b- 在解释反斜杠转义时打印相关参数。
使用 perl,它甚至更简单:
perl -e 'print pack("ccc",(0x66,0x6f,0x6f))' > file.bin
Run Code Online (Sandbox Code Playgroud)
如果您安装了 Python,请尝试以下单行:
python -c $'from struct import pack\nwith open("file.bin", "wb") as f: f.write(pack("<bbb", *bytearray([0x66, 0x6f, 0x6f])))'
测试:
$ hexdump file.bin
0000000 66 6f 6f
Run Code Online (Sandbox Code Playgroud)