二进制安全bash' here string'?

时间:2016-02-24 00:43:45

标签: bash herestring

我希望将命令的输出保存到变量中以供以后多次使用。 Bash为此目的提供Here String功能。但它不是二进制安全的。它有时会添加新的行:

$ a=''
$ xxd <<< "$a"
00000000: 0a     

有二元安全替代品吗?

我在for循环中使用变量,所以IIUIC它取消了tee命令和任何管道之类的解决方案。我还喜欢其他东西而不是临时文件,因为它们使用缓慢而且笨拙(需要可写目录,清理)。

1 个答案:

答案 0 :(得分:1)

答案取决于你需要的确切内容。如果您的问题只是here-strings添加的换行符,那么您需要的只是echo -n

$ foo=bar
$ echo -n "$foo" | od -t x1
0000000 62 61 72

如果你需要保留命令替换条的尾随换行符,或者你确实需要完全的二进制安全性,那么不幸的是没有“解决方法”。无论如何,命令替换总是会删除尾随换行符,并且如注释中所提到的,shell变量不是二进制安全的,因为它们不能包含NUL s。如果你需要这些东西,那么我很确定你唯一的选择是使用临时文件。

然而,对于使用临时文件,您说明找到可写目录的问题应该是一个小问题,因为/tmp总是保证所有人都可写,除非你'重新处理一个真正奇怪的系统,或者你的脚本应该在一个不完整或失败的启动过程中运行。在这种情况下,您只需要切换到C.否则,只需使用mktemp命令。至于清理,您可能希望使用trap内置命令。