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.