unset LC_ALL LC_CTYPE=en_US.ISO8859-1 export LC_CTYPE # Note: the first and last characters are not whitespace. # Exclude backslash and newline. bad1=`printf %03o \'\\\\` bad2=`printf %03o \'' '` e= for i in 0 1 2 3; do for j in 0 1 2 3 4 5 6 7; do for k in 0 1 2 3 4 5 6 7; do case $i$j$k in 000|$bad1|$bad2) continue ;; esac e="$e\\$i$j$k" done done done e=`printf "$e"` [ "${#e}" = 253 ] || echo length bad r1=`printf '%s\n' "$e" | { read -r x; printf '%s' "$x"; }` [ "$r1" = "$e" ] || echo "read with -r bad" r2=`printf '%s\n' "$e" | { read x; printf '%s' "$x"; }` [ "$r2" = "$e" ] || echo "read without -r bad 1" IFS= r3=`printf '%s\n' "$e" | { read x; printf '%s' "$x"; }` [ "$r3" = "$e" ] || echo "read without -r bad 2"