今天在处理文件时遇到个问题,当文件名包含空格时,for循环就出问题了。
例如,我在当前文件夹下建立3个文件名包含空格的文件:
touch "test 1"
touch "test 2"
touch "test 3"
然后for循环输出文件名:
$ for file in ls
;
do echo $file;
done
test
1
test
2
test
3
可以看到,文件名被分开了。
要解决这个问题,当然就要从单词分隔符着手。而bash中使用的是$IFS(Internal Field Separator)这个变量,内容为" \n\t":
[root@master guoneizidian]# echo "$IFS" | od -t x1
0000000 20 09 0a 0a
0000004
然后把它改成"\n\b",记得修改前先保存一下:
SALVEIFS=$IFS
IFS=$(echo -en "\n\b")
IFS=$SAVEIFS