Проблема расщепления IFS

Я использую следующую строку в начале сценария оболочки bash:

IFS=':#:' 

Но он не разделяет поле: # :, только с двоеточием. В чем проблема?

РЕДАКТИРОВАТЬ:

Это мои данные в txt-файле, и я читаю его:

 f:#:0 c:#:Test C s:#:test S ctype:#:0 a:#:test A t:#:10:02:03 r:#:test r f:#:0 c:#:Test C1 s:#:test S1 ctype:#:1 a:#:test A1 t:#:00:02:22 r:#:test r f:#:20 c:#:Test C s:#:test S ctype:#:2 a:#:test A1 t:#:00:02:03 r:#:test r 

Используя следующий код:

 IFS=':#:' while read -r key value; do ..... done < "$FileName" 

2 Solutions collect form web for “Проблема расщепления IFS”

Как было указано в @heemayl, проблема заключается в том, что IFS не обрабатывает всю строку как разделитель, она обрабатывает каждый символ как отдельный разделитель. Однако awk может использовать строку в качестве разделителя.

Например:

 #!/bin/bash while read -r key value do printf 'key %-7s val %s\n' "$key" "$value" done < <(awk -F ':#:' '{print $1" "$2}' $FileName ) key f val 0 key c val Test C key s val test S key ctype val 0 key a val test A key t val 10:02:03 key r val test r key val key f val 0 key c val Test C1 key s val test S1 key ctype val 1 key a val test A1 key t val 00:02:22 key r val test r key val key f val 20 key c val Test C key s val test S key ctype val 2 key a val test A1 key t val 00:02:03 key r val test r 

IFS не использует несколько символов (или диапазон) в качестве разделителя; каждый символ в IFS рассматривается как разделитель полей.

От man bash :

IFS Внутренний разделитель полей, который используется для разделения слов после расширения и разделения строк на слова с помощью встроенной команды чтения. Значение по умолчанию – <space><tab><newline> .

  • Использование переменной даты с помощью wget -post-data
  • base10 не работает
  • как установить кавычки вокруг переменной, чтобы программы рассматривали их как кавычки
  • Переменная окружения для ip-адреса
  • Быть root без запроса пароля в сценарии оболочки
  • не удается запустить скрипт php shell из symlink
  • Как создать скрипт, который переключает одно значение в synclient?
  • Как сравнить число с плавающей запятой в сценарии оболочки
  • Проблемы при попытке выполнить sh-файл из другого sh-файла
  • Используя команду cURL, как извлекать данные запаса, которые возвращаются * без * запятых и пробелов?
  • Как получить дату с двухнедельной давности с использованием даты Solaris?
  • Linux и Unix - лучшая ОС в мире.