O valor FS foi verificado duas vezes, o primeiro como um valor de string e o segundo como um ERE (Consulte Convenções Lexical ).
E também, POSIX não especificou o comportamento de \c quando c não é um dos " , / , \ddd com d é um dos dígitos octal, \ , a , b , f , n , r , t , v . Então você não sabe se a string \c será passada como \c ou c para ERE.
gawk , nawk e A própria versão de Brian Kernighan você c , enquanto mawk lhe dá \c :
$ for AWK in gawk mawk nawk bk-awk; do
printf '<%s>\n' "$AWK"
echo | "$AWK" -F '\.' '{print FS}'
done
<gawk>
gawk: warning: escape sequence '\.' treated as plain '.'
.
<mawk>
\.
<nawk>
.
<bk-awk>
.
Como \ será sempre reconhecido como \ , você estará seguro com \c :
$ for AWK in gawk mawk nawk bk-awk; do
printf '<%s>\n' "$AWK"; echo | "$AWK" -F '\.' '{print FS}'
done
<gawk>
\.
<mawk>
\.
<nawk>
\.
<bk-awk>
\.
O valor da string de \c será \c , portanto, usá-lo como um ERE fornece o resultado desejado.