Использование IFS в «цикле for»

Второе изображение правильное. (Кстати, это происходит отсюда .)

Из принятого ответа на этот вопрос:

The line discipline is a software module (residing in the driver, in the kernel) pushed on top of a serial/pty device that sits between that device and the line/wire (the master side for a pty).

(...)

You can see the effect of disabling the tty line discipline by issuing stty raw -echo (note that the bash prompt or other interactive applications like vi set the terminal in the exact mode they need, so you want to use a dumb application like cat to experience with that). Then, everything that is written to the slave terminal device makes it immediately to the master side for xterm to read, and every character written by xterm to the master side is immediately available for reading from the slave device.

См. также этот пост о ttys.

0
06.06.2019, 06:07
1 ответ

Большая разница заключается в том, где выполняется разбиение слов. Двойные кавычки гарантируют, что литеральная строка или переменная в кавычках, например "$lis", будут рассматриваться как один элемент

.
for i in "a:b:c:d:";
do 
    echo the output is $i
done

Таким образом, в этом цикле "a:b:c:d:"в двойных кавычках является одним элементом, поэтому вы видите только одну строку вывода

the output is a b c d

for i in $lis;
do 
    echo the output is $i
done

Здесь $lisне заключено в кавычки, поэтому оболочка выполнит разбиение слов в соответствии с установленным вами значением IFS. Оболочка увидит, что для цикла for предоставлено 4 элемента. Следовательно, почему вы видите четыре строки вывода.

Если вы поместите переменную "$lis"в двойные кавычки, разделение слов не будет выполнено, поэтому вы должны увидеть идентичный результат -только одной строки -в первом случае.

1
28.01.2020, 02:40

Теги

Похожие вопросы