首先创建一个包含以下确切内容的文件:
a\nb
我将此文件命名为foo
,如果我运行以下命令,它将打印该文件的确切内容:
bash -c 'bar=$(cat foo);echo "$bar"'
但如果你运行它sh
而不是bash
结果是:
a
b
这里的问题是\n
被转换为我不想要的换行符。
我的机器默认sh
是dash
,目标机器运行ash
内置的嵌入式linux busybox
,所以它非常简约,它的工作原理与dash
not非常相似bash
。
如果我运行sh -c 'cat foo'
它得到预期的结果,但我希望它在变量内,我该怎么做?
答案1
实际上,shell 会分叉并执行命令。但每次执行命令(非内置命令)时,shell 都会分叉。这就是 shell 的工作方式,这是不可避免的。
注意:shell 不翻译任何内容。该echo
命令可以。但你可以使用printf
:
your_shell -c 'bar=$(cat foo); printf %s "$bar"'