![/bin/sh - echo >> 运算符未按预期工作](https://linux22.com/image/67363/%2Fbin%2Fsh%20-%20echo%20%3E%3E%20%E8%BF%90%E7%AE%97%E7%AC%A6%E6%9C%AA%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
我正在编写一个 shell 脚本,将二进制内容附加到文件中。我尝试使用这个命令:
echo -en '\x61\x62\x63..' >> /tmp/myfile
但这导致了以下输出:
-en \x61\x62\x63..
有什么方法可以将内容附加到文件中,而不必每次都删除所有内容?
笔记
我正在尝试在一个系统上执行此操作仅有的有/bin/sh
,此命令可以正常工作,bash
但在使用默认 shell 时则不行。
答案1
在 bash 中,echo
是一个内置函数,因此您会得到这种行为。在 sh 中它不是内置的。好像嘘使用不同的内置“echo”命令。
因此,尝试使用/bin/echo
而不是不使用/bin/
.
答案2
如果你想坚持便携性,你不能使用回声或者打印函数,两者都将未指定的转义序列\xXX
视为 POSIX 定义的。
即使在 GNU 系统中, 的行为echo
也可以是内置的或/bin/echo
可以更改的。你可以试试:
$ POSIXLY_CORRECT=1 /bin/echo -en '\x61'
-en \x61
$ env BASHOPTS=xpg_echo POSIXLY_CORRECT=1 bash -c "echo -en '\x61'"
-en a
(你应该读这更多细节)。
使用标准 POSIX 工具箱,您可以使用awk
:
$ awk 'BEGIN{printf "%c%c%c..", 97, 98, 99}'
abc..