小编ant*_*lex的帖子

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

在尝试通过使用NULL字符作为分隔符来正确处理文件//foldernames列表(请参阅我的其他问题)时,我偶然发现了Bash的一个奇怪的行为,我不明白:

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

例如,

echo -ne "n\0m\0k" | od -c   # -> 0000000   n  \0   m  \0   k
Run Code Online (Sandbox Code Playgroud)

但:

VAR1=`echo -ne "n\0m\0k"`
echo -ne "$VAR1" | od -c   # -> 0000000   n   m   k
Run Code Online (Sandbox Code Playgroud)

这意味着我需要将该字符串写入文件(例如,在/ tmp中),如果不希望或不可行直接管道,则从那里读回.

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

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

bash null-character

26
推荐指数
3
解决办法
3万
查看次数

如何使用NULL(\ 0)作为GNU排序中的分隔符

我正在寻找一种方法来排序find正确返回多个目录的结果,以便在bash脚本中进一步处理.因为文件名不能包含NULL(\ 0)字符,我认为这将为管道传输的结果提供一个很好的分隔符sort.

所以这就是我期望的工作方式:

find ./ -maxdepth 1 -type d -iname 'xyz?' -print0 | sort -t $'\0'
Run Code Online (Sandbox Code Playgroud)

但遗憾的是我得到了复杂 sort: empty tab

环顾四周寻找解释时遇到了一个类似的结果,这个结果被认为是正常工作(参见11月26日的卢卡斯评论).在我的情况下(使用GNU sort v 7.4),这似乎是不同的.

我还通过管道输入检查了find的输出,od -c但这只显示结果文件夹按预期分隔为NULL.

有没有人在这里遇到类似的情况,并可能找到一个解决方案或解释为什么\ 0似乎是一个不可能的排序分类?

期待你的回答......

编辑:请注意这里使用find-command作为示例,一种更简单的方法来测试/说明这可能echo "g\0u\0b\0k" | sort -t $'\0'

sorting bash

13
推荐指数
1
解决办法
8002
查看次数

标签 统计

bash ×2

null-character ×1

sorting ×1