Bash脚本中find命令使用变量时无返回结果问题求助
故障排查与修复方案
核心问题点
- 变量名拼写错误:脚本中将
find命令的执行结果赋值给了写错的变量名lien,后续输出逻辑没有调用该变量,自然看不到返回结果 - 文件换行符不兼容:如果
bat.txt是Windows环境下生成的,行尾默认携带不可见的\r回车符,读取到$line变量后会拼接在文件夹名末尾,导致find匹配不到名称完全对应的文件夹 - 边界逻辑缺失:
read命令未加防截断、防转义参数,读取文件时未对路径加引号,特殊场景下会出现异常
修复步骤
- 先处理文本文件的换行符问题,执行以下命令移除行尾的
\r:
dos2unix bat.txt
如果没有dos2unix命令也可以用sed替代:
sed -i 's/\r$//' bat.txt
- 替换为修正后的脚本:
#!/bin/bash filename='bat.txt' n=1 while IFS= read -r line; do find_result=$(find ./ -type d -name "$line") echo "line no. $n : 查找关键词=$line, 匹配结果=$find_result" n=$((n+1)) done < "$filename"
内容的提问来源于stack exchange,提问作者Hamza YOUSSOUF
相关产品推荐
相关产品推荐

