0

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

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

有没有二进制安全的替代方案?

我在 for 循环中使用该变量,因此 IIUIC 它取消了tee命令和任何类似管道的解决方案的资格。除了临时文件,我还更喜欢其他的东西,因为它们使用起来很慢而且很笨拙(需要一个可写的目录,清理)。

4

1 回答 1

1

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

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

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

然而,至于使用临时文件,您所说的查找可写目录的问题应该很小,因为/tmp除非您在一个非常奇怪的系统上工作,或者您的脚本应该运行,否则始终保证所有人都是可写的也许在不完整或失败的引导期间。在这种情况下,您只需要切换到 C 即可。否则,只需使用mktemp命令。至于清理,您可能需要使用trap内置命令。

于 2016-02-24T14:20:49.437 回答