bash 使用变量查找

mol*_*lni 3 shell bash find text-processing

我有一个我不明白的问题。这很简单,它应该可以工作,但事实并非如此。= EDITED 正是我从终端看到的内容= 我有一个文件名列表:

[molni@archlinux picasa_album]$ cat LIST
IMG_9282.JPG
IMG_9287.JPG
IMG_9300.JPG
IMG_9324.JPG
IMG_9329.JPG
IMG_9463.JPG
IMG_9412.JPG
IMG_9562.JPG
IMG_9511.JPG
IMG_9607.JPG
Run Code Online (Sandbox Code Playgroud)

并希望通过 find 命令搜索列表中的每个文件的路径:

[molni@archlinux picasa_album]$ for i in `cat LIST`; do find /mnt/c/e-m10/  -name "$i";  done
[molni@archlinux picasa_album]$ 
Run Code Online (Sandbox Code Playgroud)

没有结果,当我用它换回 echo $i 时(检查变量 $i 是否正常,它有效)

[molni@archlinux picasa_album]$ for i in `cat LIST`;do echo "$i" ;  done
IMG_9282.JPG
IMG_9287.JPG
IMG_9300.JPG
IMG_9324.JPG
IMG_9329.JPG
IMG_9463.JPG
IMG_9412.JPG
IMG_9562.JPG
IMG_9511.JPG
IMG_9607.JPG
[molni@archlinux picasa_album]$ 
Run Code Online (Sandbox Code Playgroud)

当我手动执行时,设置变量(无循环)它可以工作:

[molni@archlinux picasa_album]$ i=IMG_9607.JPG
[molni@archlinux picasa_album]$ find /mnt/c/e-m10/ -name "$i"        
/mnt/c/e-m10/IMG_9607.JPG
[molni@archlinux picasa_album]$ 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

wur*_*tel 6

做一个cat -v LIST看看是否有任何你没有看到的简单回显的特殊字符。我怀疑 DOS 行结尾,即换行前的无关回车。

编辑:转换列表文件:

dos2unix < LIST > LIST.new && mv LIST.new LIST
Run Code Online (Sandbox Code Playgroud)

或者,如果您没有 dos2unix,但有 vim: vim LIST,则:set notx,则:wq