Как бы я ни любил shell, вероятно, дело в том, что, как только вы добавляете произвольные структурированные данные, оболочка Unix bourne / posix не является правильным выбором.
Если есть символы, которые непроисходят внутри полей, а затем разделяются с одним из них.Классический пример - /etc/passwd
, /etc/group
и другие файлы, в которых в качестве разделителя полей используется двоеточие.
Если используется оболочка, которая может обрабатывать символ NUL внутри строк, то соединение с NUL и разделениена нем (через $ IFS или что-то еще) может хорошо работать.Но несколько общих оболочек, включая bash, ломаются на NUL.Тест был бы моим старым .sig:
foo=$'a\0b'; [ ${#foo} -eq 3 ] && echo "$0 rocks"
Даже если это сработало бы для вас, вы только что достигли одного из предупреждающих признаков того, что пришло время переключиться на более структурированный язык (Python, Perl, Ruby, Lua, Javascript ... выберите нужный яд).Ваш код, вероятно, станет трудно поддерживать;даже если вы можете, есть небольшая группа людей, которые поймут это достаточно хорошо, чтобы поддерживать это.