Resposta direta
O comando sem aspas : echo a b c
, será dividido em (espaço do metacaractere) não importa o que IFS
seja ou não. Os argumentos divididos para echo
: a
, b
e c
serão impressos com espaços porque echo é definido assim:
LESS=+/'^ *echo \[-neE\] \[arg ...\]' man bash
Output the args, separated by spaces, followed by a newline.
Também não há $IFS
envolvido.
Então, o que você citou não tem relevância aqui. A parte principal é:
... splits the results of the other expansions into words ...
Você deve ter uma expansão antes que $IFS
seja usado.
Não há expansão em a b c
.
Se você tiver um efeito de $ IFS, use uma expansão sem aspas:
$ var='a b c'
$ echo $var
a b c
Mas isso ainda não usa $IFS
para saída, apenas para divisão.
IFS na saída.
Onde $IFS
tem relevância (para saída) está em $*
.
$ set -- a b c
$ IFS=$'\t'
$ printf '%s\n' "$*" | od -An -vtx1c
61 09 62 09 63 0a
a \t b \t c \n
É disso que você precisa?
Outras questões.
Guia do teclado
when I hit the key Tab, there is no response
Em seguida, pressione Ctrl V , solte e depois pressione Tab .
Mas sem aspas, você não poderá atribuir uma guia a uma variável. Teste:
$ var=a b ### The space represents a tab as above.
bash: b: command not found
Você precisará:
$ var="a b" ### The space represents a tab as above.
Aspas duplas no mínimo.
Citar o IFS
nothing comes out of $IFS:
$ echo $IFS
Nada sai do $IFS
porque você não citou $IFS
. Experimente:
<user>$ echo "$IFS" | sed -n l
\t$
$
<user>$
Que tem uma nova linha de $IFS
e uma do comando echo.
Melhor mudar para printf:
<user>$ printf '%s' "$IFS" | sed -n l
\t$
<user>$
E use od:
$ printf '%s' "$IFS" | od -An -vtx1c
20 09 0a
\t \n
Como já temos uma maneira de "ver" quais caracteres estão contidos em uma string.
Podemos também usar isso para "ver" o que está dentro de algumas strings:
$ var='a b c'
$ echo "$var" | od -An -vtx1c
61 20 62 20 63 0a
a b c \n
Isso não deveria ser uma surpresa. Como isso (com aspas simples) não deve ser:
$ var='a\
> b\
> c'
$ echo "$var" | od -An -vtx1c
61 5c 0a 62 5c 0a 63 0a
a \ \n b \ \n c \n
Exatamente o que foi digitado. Se a var for citada corretamente, a contrabarra aparecerá corretamente.
Citação
Mas a citação com aspas duplas pode alterar alguns caracteres:
$ var="a\
> b\
> c"
$ echo "$var" | od -An -vtx1c
61 62 63 0a
a b c \n
Mas o que você escreveu não tem citações para definir o var nem usá-lo no echo.
Essa é uma regra de não-não em shells. Por favor Cite corretamente .