Я столкнулся со странной проблемой после временного изменения IFS
с целью построения массива:
$ echo "1 2 3" |while read myVar1 myVar2; do echo "myVar1: ${myVar1}"; echo "myVar2: ${myVar2}"; done
myVar1: 1
myVar2: 2 3
$ IFS=':' myPaths=( ${PATH} ) # this works: I have /home/morgwai/bin on ${myPaths[0]} , /usr/local/sbin on ${myPaths[1]} and so on
$ echo "1 2 3" |while read myVar1 myVar2; do echo "myVar1: ${myVar1}"; echo "myVar2: ${myVar2}"; done
myVar1: 1 2 3
myVar2:
$ echo $IFS
$ echo "1:2:3" |while read myVar1 myVar2; do echo "myVar1: ${myVar1}"; echo "myVar2: ${myVar2}"; done ;
myVar1: 1
myVar2: 2:3
Обычно, когда я временно меняю IFS
для любой другой команды, кроме построения массива (например, IFS=',' echo whatever
) его значение изменяется только во время его выполнения, однако здесь кажется, что IFS
навсегда изменилось на двоеточие (хотя echo $IFS
этого не показывает, что еще более странно ...) .
Это ошибка или какое-то ожидаемое поведение, которого я не понимаю?
Я использую bash версию 4.4.18, если это важно ...
Примечание: я знаю, что могу построить тот же массив, используя IFS=':' read -a myPaths <<< ${PATH}
, а затем IFS
обычно возвращается к значению по умолчанию, но дело не в этом: я пытаюсь понять, что на самом деле происходит в приведенном мной примере выше.
Спасибо!