GNU bash,版本 4.3.42(1)-release
试图区分空字符,但 bash 似乎没有将空字符保留在变量中。
$ echo -e 'hello\0goodbye' > testlist
$ cat testlist | cut -d '' -f1
hello
$ foobar=$(echo -e 'hello\0goodbye'); echo "$foobar" | cut -d '' -f1
hellogoodbye
有什么我做错了吗?
GNU bash,版本 4.3.42(1)-release
试图区分空字符,但 bash 似乎没有将空字符保留在变量中。
$ echo -e 'hello\0goodbye' > testlist
$ cat testlist | cut -d '' -f1
hello
$ foobar=$(echo -e 'hello\0goodbye'); echo "$foobar" | cut -d '' -f1
hellogoodbye
有什么我做错了吗?
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')
如您所见,丢失空值。