Especialmente com IFS
, você absolutamente quer citá-lo, já que, caso contrário, ele se transforma em nada. Você já fez isso, então não há problema.
Quanto a echo
, isso depende do shell. Algumas versões do echo
manipulam escapes de barra invertida por padrão, outras não. Bash não faz, zsh faz:
$ bash -c 'echo "foo\nbar"'
foo\nbar
$ zsh -c 'echo "foo\nbar"'
foo
bar
É melhor usar printf
: printf "%s" "$IFS" | hexdump -C
.
Veja também: Por que o printf é melhor que o eco?
printf "%q" "$IFS"
também funciona no Bash e no zsh.
Isso deve mantê-lo bem, exceto que Bash não pode lidar com bytes NUL ( %code%
), zsh can. Bash:
$ var=$'foo$ var=$'foo$ bash -c 'echo "foo\nbar"'
foo\nbar
$ zsh -c 'echo "foo\nbar"'
foo
bar
bar'
$ printf "%q\n" "$var"
foo$'$ var=$'foo$ var=$'foo%pre%bar'
$ printf "%q\n" "$var"
foo$'%pre%'bar
bar'
$ printf "%q\n" "$var"
foo
'bar
bar'
$ printf "%q\n" "$var"
foo
zsh:
%pre%