在尝试通过使用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字符的字符串?
我有一系列用管道链接在一起的命令:
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?