Если в вашем сценарии нет явной строки #!
, есть вероятность, что команда sudo-ed выполняется под /bin/sh
, а не /bin/bash
, и, если вы работаете в недавнем Linux система, скорее всего, /bin/sh
это dash
, а не bash
. Сопровождающие dash утверждают, что IFS не должен интерпретировать escape-последовательности (см., Например, here
).
$ more convert.sh
IFS=$'\n'
PICS="/media/disk/kevin/Images/";
echo $PICS;
ps
$ ./convert.sh
/media/disk/kevin/Images/
PID TTY TIME CMD
30827 pts/0 00:00:01 bash
32042 pts/0 00:00:00 bash
32043 pts/0 00:00:00 ps
$ sudo ./convert.sh
/media/disk/kevi /Images/
PID TTY TIME CMD
32044 pts/0 00:00:00 sh
32045 pts/0 00:00:00 ps
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2009-08-06 19:10 /bin/sh -> dash
Таким образом, поведение, которое вы видите, только косвенно связано с запуском под root. Вы бы увидели то же самое, если бы вы явно использовали тире. И еще один способ обойти эту проблему - включить в свой сценарий объяснение #!/bin/bash
.