Я экспериментировал с IFS и read . Я попробовал следующее, и я не могу понять, почему это так:

$ IFS=$' \t\n'
$ read a <<< "the plain gold ring"
$ printf "=%s=\n" $a
=the=
=plain=
=gold=
=ring=
  1. Является a массив сейчас? Или это строка?
  2. Почему read добавить новую строку между двумя словами?
  3. Почему printf печатает так, как будто он внутри цикла?

Я на самом деле ожидать , никакого разделения не произойдет , потому что я читаю в одной переменной a только.

1 ответ1

3
  1. Является a массив сейчас? Или это строка?

Это строка. Вы сказали read для чтения одной переменной, вся строка хранилась как. Если бы команда a , то read a b c <<< … получала a , the получала бы b а plain получала c .

  1. Почему read добавить новую строку между двумя словами?

Это не так, printf сделал, потому что вы сказали это. Запустите echo $a .

  1. Почему printf печатает так, как будто он внутри цикла?

Потому что $a расширяется до нескольких слов. Формат, который вы предоставили, ожидает одну строку, он получает много. Слишком много аргументов в printf . Сравните printf "=%s=\n" "$a" где "$a" - это единственный аргумент для printf .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .