Отлично, спасибо! Этот последний комментарий был недостающей информацией, которая ответила на мой заданный вопрос.

через Башруководствои, в частности, тема разделения слов.

Этот скрипт, называемый «args», помогает продемонстрировать примеры разделения слов:

#!/usr/bin/env bash
printf "%d args:" $#
printf " <%s>" "$@"
echo

Пример:

$ ./args hello world, here is "a string of text!"
5 args: <hello> <world,> <here> <is> <a string of text!>

Все идет нормально. Я понимаю, как это работает.

Однако, когда я заменяю IFS непробельным символом, скажем,:, скрипт не выполняет разбиение слов, если я передаю строку непосредственно в качестве аргумента.

$ ./args one:two:three
1 args: <one:two:three>

Тем не менее, сценарийделает выполнить разделение слов на одной и той же строке, если я (1) назначу строку переменной, а затем (2) передам строку в сценарий с помощью раскрытия параметров.

$ IFS=:
$ variable="one:two:three"
$ ./args $variable
3 args: <one> <two> <three>

Зачем? В частности, почему передача строки в качестве аргумента подвергается разделению слов, если IFS не установлен, а разделители являются пробельными символами, но не тогда, когда IFS установлен на непробельные символы?

Когда я используюread вместо этого сценария та же строка также подвергается разделению слов, как и ожидалось.

$ IFS=:
$ read a b c
one:two:three
$ echo $a $b $c
one two three

Ответы на вопрос(1)

Ваш ответ на вопрос