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
我有什么问题吗?
答案 0 :(得分: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')
失去了null,就像你找到的那样。