Search code examples
shellnullposix

Shell: How can I posixly determine if a file contains one or more null characters?


There are some great answers that address removing null characters from a file- it seems like sed is probably the most effective way. However, all the other questions I have been able to find are concerned not with finding null characters but removing them.

There are certain questions that do provide valid solutions- however, I am having difficulty finding a POSIX-compliant solution that does not rely on GNUisms. The two solutions I've seen that work use cat with the -v option and grep with the -P option (neither of which shall be supported).

I make it a habit to delegate as much as possible to the shell, but the shell can't help me here because it is not possible to store a null character in a variable. External tools are the only option, but I can't even find a way with them when I adhere to POSIX-compliant options.


Solution

  • One possible way would be tr and wc:

    [ "$(tr -cd '\0' < file | wc -c)" -ge 0 ]
    

    Alternatively, od and grep will allow stopping on the first one without reading the rest of the file:

    od -A n -t x1 file | grep -q 00