我希望将命令的输出保存到变量中以供以后多次使用。 Bash为此目的提供Here String功能。但它不是二进制安全的。它有时会添加新的行:
$ a=''
$ xxd <<< "$a"
00000000: 0a
有二元安全替代品吗?
我在for循环中使用变量,所以IIUIC它取消了tee
命令和任何管道之类的解决方案。我还喜欢其他东西而不是临时文件,因为它们使用缓慢而且笨拙(需要可写目录,清理)。
答案 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
内置命令。