shell 里面处理文件名中带空格的文件

43 阅读1分钟

需求及问题

当我们在 shell 中想对一个文件列表进行处理,但是文件名中有中文,会让我们的操作报错,例如:

#!/bin/bash
for file in $(find ./ -type f); do
    echo ${file}
done

这个简单的例子,我们想象中的是打出一系列完整的文件名,可是实际却是下面这样打的稀碎。

image.png

解决方法

先说结果,只要加一行命令即可。

#!/bin/bash
IFS=$'\t\n' ######## 这里是重点
for file in $(find ./ -type f); do
    echo ${file}
done

Linux 中 有一个 Internal Field Seprator 变量,简称 IFS,译为内置分隔符。通过命令set | grep IFS 可以查看到它的默认值是空格+制表符+换行符

image.png 上面覆盖了IFS再来看看有没有效果

image.png