需求及问题
当我们在 shell 中想对一个文件列表进行处理,但是文件名中有中文,会让我们的操作报错,例如:
#!/bin/bash
for file in $(find ./ -type f); do
echo ${file}
done
这个简单的例子,我们想象中的是打出一系列完整的文件名,可是实际却是下面这样打的稀碎。
解决方法
先说结果,只要加一行命令即可。
#!/bin/bash
IFS=$'\t\n' ######## 这里是重点
for file in $(find ./ -type f); do
echo ${file}
done
Linux 中 有一个 Internal Field Seprator 变量,简称 IFS,译为内置分隔符。通过命令set | grep IFS
可以查看到它的默认值是空格+制表符+换行符
上面覆盖了IFS再来看看有没有效果