Como o IFS é realmente renderizado?

2

Li manpage bash e outros documentos, mas acho a explicação um pouco confusa.

Eu tenho o seguinte script simples:

#!/bin/bash

IFS=""

echo $2

var=A B C

echo $var

se eu o executar, por exemplo:

LANG=C ./args2 3 4
4
./args2: line 7: B: command not found

Eu realmente não entendo, por que $ 2 = 4? Se manual diz:

If the value of IFS is null, no word splitting occurs.

A mesma coisa com declaração var, por que reclama de "B"? Então, existe a divisão de palavras?

    
por sebelk 04.05.2015 / 01:02

2 respostas

1

Esta seção do manual do bash apresenta as etapas: Operação da Shell

No passo 3, o script é dividido em comandos, argumentos, etc.

  • nesta etapa, obtemos os tokens "var = A", "B" e "C"
  • veja a seção Comandos simples onde diz (ênfase minha):

    A simple command is [...] just a sequence of words separated by blanks

  •   
  A divisão de palavras não é executada até as expansões, etapa 4.

Como Qudit explicou, seu shell split "LANG = C ./args2 3 4" em tokens antes ativando o comando "./args2"

    
por 04.05.2015 / 02:14
1

Antes do seu script ser executado, o IFS tem seu valor padrão. A divisão do argumento é feita na instância bash em que você executou seu script e divide as coisas normalmente porque ainda não definiu o IFS.

    
por 04.05.2015 / 01:08

Tags