相关疑难解决方法(0)

将包含空字符(\ 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万
查看次数

如果输入不正好有 1 行,则返回错误,否则将输入传送到下一步

我有一系列用管道链接在一起的命令:

should_create_one_line | expects_one_line

第一个命令should_create_one_line应该生成只有一行的输出,但在奇怪的情况下,输出可能是多行或空。

我想在这两者之间添加一个步骤validate_one_line

should_create_one_line | validate_one_line | expects_one_line

如果其输入恰好包含 1 行,validate_one_line则将简单地输出其输入。如果其输入包含多于 1 行或为空,validate_one_line则应导致整个步骤序列停止并返回错误代码。

我可以使用什么命令validate_one_line

bash shell sh

5
推荐指数
1
解决办法
249
查看次数

标签 统计

bash ×2

null-character ×1

sh ×1

shell ×1