Tentando entender como trabalhar com o IFS

4

Estou tentando entender como trabalhar com a variável de shell IFS . Eu tenho o seguinte código:

#!/bin/bash

ourpath=$PATH
oldIFS=$IFS
IFS=":"
echo "ourpath = $ourpath"
for directory in "$ourpath"; do
    echo "directory = $directory"
done

IFS=$oldIFS

Executando isso usando bash test.sh yields:

ourpath = ~/bin:/home/<user>/anaconda3/bin:/home/<user>/.local/bin:/home/<user>/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:~/scripts
directory = ~/bin:/home/<user>/anaconda3/bin:/home/<user>/.local/bin:/home/<user>/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:~/scripts

Mas eu esperaria que directory fizesse um loop pelos diretórios em $PATH , porque ele deveria ser dividido por : . O que está errado aqui?

    
por Hunter 14.10.2018 / 02:11

1 resposta

5

É exatamente igual ao espaço: você citou $ourpath e não foi dividido. Se você remover as aspas, ele lhe dará o resultado que você está procurando.

Ou seja:

for directory in $ourpath ; do
    echo "directory = $directory"
done

Pontos de bônus: não importa se $ourpath contém espaços porque IFS é : , por isso só será dividido em :

    
por 14.10.2018 / 02:14