在变量内使用cut on null字符

时间:2016-11-24 06:35:53

标签: bash null-character

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 个答案:

答案 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,就像你找到的那样。