使用Bash循环创建目录/文件时末尾出现特殊字符的求助
解决Git Bash中while循环读取文件创建目录时末尾出现特殊字符的问题
问题原因
你遇到的特殊字符大概率是**Windows换行符(CRLF中的\r)**或者文件中混入了不可见控制字符,这些字符在Git Bash环境中被解析成了异常显示符号(比如你看到的)。
解决方案(保留while循环写法)
1. 先排查文件中的隐藏字符
执行以下命令查看文件内所有不可见字符,确认问题根源:
cat -A folders.txt
如果每行末尾显示^M,说明是Windows换行符问题;若出现其他陌生符号,则是文件混入了控制字符。
2. 读取时实时过滤多余字符
修改while循环脚本,在处理每行内容时自动清理异常字符:
while IFS= read -r line; do # 移除Windows换行符(\r)及所有控制字符 cleaned_line=$(echo "$line" | tr -d '\r[:cntrl:]') # 创建目录(-p参数兼容单目录/嵌套目录创建场景) mkdir -p "$cleaned_line" done < folders.txt
3. 精准去除目标特殊字符
如果确认是固定的特殊符号(比如你看到的对应Unicode码U+F00D),可以用awk精准替换:
while IFS= read -r line; do cleaned_line=$(echo "$line" | awk '{gsub(/\xF0\x9F\x94\x8D|[\r]/,"")}1') mkdir -p "$cleaned_line" done < folders.txt
4. 彻底修复源文件格式
如果是文件本身的格式问题,直接将文件转换为Unix格式:
# 方式1:使用dos2unix工具转换(若已安装) dos2unix folders.txt # 方式2:用sed移除每行末尾的\r字符 sed -i 's/\r$//' folders.txt
修复后再运行你原本的while循环脚本,即可正常创建目录。
内容的提问来源于stack exchange,提问作者Ben Jones
相关产品推荐
相关产品推荐

