在bash中查找不在循环中搜索变量

在bash中查找不在循环中搜索变量,bash,Bash,我试图在项目的目录中找到.csv文件名(全部在一列中),以确定项目中存在哪些文件。我将把这些文件的目录输出到另一个csv,但在使用此循环时找不到返回的任何内容。这些文件通常有下划线、连字符和句点,但没有其他特殊字符或空格 #!/bin/bash while read file; do echo $file find "/Users/myname/Documents/project/software 6.2.0.1/webclient" -name "$file" -exec ec

我试图在项目的目录中找到.csv文件名(全部在一列中),以确定项目中存在哪些文件。我将把这些文件的目录输出到另一个csv,但在使用此循环时找不到返回的任何内容。这些文件通常有下划线、连字符和句点,但没有其他特殊字符或空格

#!/bin/bash
while read file; do
    echo $file
    find "/Users/myname/Documents/project/software 6.2.0.1/webclient" -name "$file" -exec echo '{}' \;
done < test.csv
运行
bash-x./script.sh之后,我的控制台显示:

+ read file
+ echo $'Organization_createLocation.uim\r'
Organization_createLocation.uim
+ find '/Users/myname/Documents/project/software 6.2.0.1/webclient' -name
$'Organization_createLocation.uim\r' -exec echo '{}' ';'`

对于.csv中的每个项目,每行末尾都有回车符
bash-x./myscript.sh
帮助我找到回车符,并且
dos2unix
解决了我的问题。它现在运行正常。

什么是
echo“$file==”
输出?(引号更为重要,但是
==
表明如果在值的末尾有回车符。)您可以发布test.csv的示例和脚本的输出吗?也许$file中有一个NL字符?顺便说一句,
-exec echo'{}'
有些毫无意义,因为它(打算)相当于
-print
,如果不提供其他操作,它本身就是假定的。运行
bash-x yourscript
来启用调试日志记录会很有帮助,因为它将为您提供正在运行的确切的
find
命令,您可以将其与工作命令进行比较。@Battlebite这意味着
file
的值类似于
foo\r
,而不是
foo
。CSV文件具有DOS行结尾,并且
bash
将行结尾的
\r
部分视为常规字符。
+ read file
+ echo $'Organization_createLocation.uim\r'
Organization_createLocation.uim
+ find '/Users/myname/Documents/project/software 6.2.0.1/webclient' -name
$'Organization_createLocation.uim\r' -exec echo '{}' ';'`