bash中是否有二进制安全的“三小于”<<<运算符?

Mik*_*ail 30 bash redirection

这是一个相当假设的问题,所以请不要问我为什么要这样做。

假设我有一个GIF包含二进制数据的变量,并假设我不能使用管道|运算符,以下应该是使用“triple-less-than”运算符的正确方法:

openssl enc -base64 <<< $GIF

但是,在我看来这<<<不是二进制安全的,因此二进制数据会损坏。

是否有二进制安全的等价物?

Dan*_*ruz 34

这里串的重定向(<<<)是一个简单的形式,这里的文件重定向(<<)。这里的字符串重定向不是“二进制安全的”;Bash 将对 here 字符串执行扩展。此外,Bash 将在 here 字符串的末尾附加一个新行(发出命令xxd -p <<< "foo",您将得到666f6f0a回报)。

除了管道,您唯一安全的选择是I/O redirection

类似的不是二进制安全问题在这里。您可以存储编码数据并尝试此操作

COMMAND_WITH_BIN_INPUT <(uudecode <(echo "$uuEncodedData")) 
Run Code Online (Sandbox Code Playgroud)

然而这并不遥远

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT
Run Code Online (Sandbox Code Playgroud)

但没有管道元字符。


Pau*_*aul 5

Bash 通常不是二进制安全的,并且会在替换过程中破坏包含二进制内容的变量中的空值和换行符。

所以我认为答案是“不”,但更根本的是“不是在 shell 脚本语言中”,因为它们似乎都存在二进制问题。

但是我想说的是,您打算将数据放入 $GIF 中,而是将其放入文件中,或者使用 python 作为替代脚本语言,它可以毫无问题地处理二进制数据。