Понимание для цикла - PullRequest
       4

Понимание для цикла

0 голосов
/ 12 марта 2020

Может кто-нибудь помочь мне понять код ниже

Я сбрасываю IFS на новую строку во 2-й строке самого скрипта. Это значение считывается командой. Внутри внутреннего для команды я сбрасываю значение IFS в:

1) Как значение IFS снова сбрасывается в новую строку после первой итерации внешнего l oop как внешнего для l oop, начиная с 3-я строка, и я назначаю символ новой строки для IFS во 2-й строке.

2) Когда я выполняю echo $ IFS во внешнем l oop и внутреннем l oop, он становится пустым. Любая идея, почему.

Может кто-нибудь объяснить, как это работает

test.txt:

cat test.txt

oracle:dba
network:admin
system:engineer

test. sh:

cat test.sh

#!/bin/bash
# changing the IFS value

IFSOLD=$IFS
IFS=$'\n'
for entry in $(cat test.txt)
do
    echo "Values in $entry "
    IFS=:
    for value in $entry
    do
      echo " $value"
    done
done



sh test.sh

Values in oracle:dba
 oracle
 dba
Values in network:admin
 network
 admin
Values in system:engineer
 system
 engineer

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

IFS не нужно сбрасывать для внешнего l oop. Результат $(cat test.txt) делится с помощью IFS до запуска l oop, он не разделяется снова каждый раз через l oop.

0 голосов
/ 12 марта 2020

Не используйте от for l oop до итерации по строкам файла ; используйте while l oop.

Затем используйте read, чтобы разбить каждую строку на массив отдельных значений.

while IFS= read -r entry; do
    echo "Values in $entry"
    IFS=: read -a values <<< "$entry"
    for value in "${values[@]}"; do
        echo " $value"
    done
done < test.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...