/bin/sh - echo >> 运算符未按预期工作

/bin/sh - echo >> 运算符未按预期工作

我正在编写一个 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..

相关内容