通过破折号中的 echo 避免反斜杠扩展

通过破折号中的 echo 避免反斜杠扩展

首先创建一个包含以下确切内容的文件:

a\nb

我将此文件命名为foo,如果我运行以下命令,它将打印该文件的确切内容:

bash -c 'bar=$(cat foo);echo "$bar"'

但如果你运行它sh而不是bash结果是:

a
b

这里的问题是\n被转换为我不想要的换行符。

我的机器默认shdash,目标机器运行ash内置的嵌入式linux busybox,所以它非常简约,它的工作原理与dashnot非常相似bash

如果我运行sh -c 'cat foo'它得到预期的结果,但我希望它在变量内,我该怎么做?

答案1

实际上,shell 会分叉并执行命令。但每次执行命令(非内置命令)时,shell 都会分叉。这就是 shell 的工作方式,这是不可避免的。

注意:shell 不翻译任何内容。该echo命令可以。但你可以使用printf

your_shell -c 'bar=$(cat foo); printf %s "$bar"'

相关内容