gpt4 book ai didi

bash - 将包含空字符 (\0) 的字符串分配给 Bash 中的变量

转载 作者:行者123 更新时间:2023-11-29 08:43:27 25 4
gpt4 key购买 nike

在尝试通过使用 NULL 字符作为分隔符来正确处理文件/文件夹名称列表 ( see my other questions ) 时,我偶然发现了 Bash 的一种我不理解的奇怪行为:

将包含一个或多个 NULL 字符的字符串分配给变量时,NULL 字符将丢失/忽略/不存储。

例如,

echo -ne "n\0m\0k" | od -c   # -> 0000000   n  \0   m  \0   k

但是:

VAR1=`echo -ne "n\0m\0k"`
echo -ne "$VAR1" | od -c # -> 0000000 n m k

这意味着我需要将该字符串写入一个文件(例如,在/tmp 中),如果不需要或无法直接通过管道传输,我需要从那里读回它。

Z shell 中执行这些脚本时(zsh) 在这两种情况下都保留了包含\0 的字符串,但遗憾的是我不能假设 zsh 存在于运行我的脚本的系统中,而 Bash 应该存在。

如何在不丢失任何(元)字符的情况下有效地存储或处理包含\0 个字符的字符串?

最佳答案

在 Bash 中,您不能将 NULL 字符存储在变量中。

但是,您可以使用 xxd 命令存储数据的普通十六进制转储(稍后再次反转此操作)。

VAR1=`echo -ne "n\0m\0k" | xxd -p | tr -d '\n'`
echo -ne "$VAR1" | xxd -r -p | od -c # -> 0000000 n \0 m \0 k

关于bash - 将包含空字符 (\0) 的字符串分配给 Bash 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6570531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com