Использование обрезанного нулевого символа внутри переменной
GNU bash, версия 4.3.42(1)-релиз
Попытка уменьшить нулевой символ, но bash, похоже, не сохраняет нулевой символ в переменной.
$ echo -e 'hello\0goodbye' > testlist
$ cat testlist | cut -d '' -f1
hello
$ foobar=$(echo -e 'hello\0goodbye'); echo "$foobar" | cut -d '' -f1
hellogoodbye
Я что-то не так делаю?
1 ответ
Bash встраивает двоичный ноль:
echo -e 'hello\0goodbye' | od -xc
дает:
0000000 6568 6c6c 006f 6f67 646f 7962 0a65
h e l l o \0 g o o d b y e \n
хотя лично я предпочитаю \x00
нотации.
Это cut
Программа, которая является проблемой. Таким образом, вы можете использовать awk
язык вместо. Например:
awk -F '\0' '{print $1}' testlist
(примечание: нет cat
требуется) и:
foobar='hello\0goodbye'
echo -e "$foobar" | awk -F '\0' '{print $1}'
оба дают:
hello
Тем не мение, \0
раскрывается в пустую строку (как описано в man bash
) так
foobar=$(echo -e 'hello\0goodbye')
теряет ноль, как вы нашли.