问题
执行以下shell脚本循环打印文件夹内的所有文件名,发现具有空格的文件名会被分段打印出来,例如“test a cc.jpg”,会分别打印“test”、“a"、”cc.jpg“
list=`ls ./` for name in list;do echo $name done
原因
for循环文件名时是将所有文件名作为一个大字符串进行分割然后换行输出,而分割的标识是IFS,IFS默认分隔符是空格、tab、换行,所以会将换行符和空格同样对待,所以需要更改IFS的分割标志.
解决方法
添加以下代码暂时修改IFS分割标识:
OLDIFS=$IFS # 暂存初始IFS IFS=$'\n' # 修改IFS标识为换行符 list=`ls ./` for name in list;do echo $name done IFS=$OLDIFS # 恢复IFS标识