Bash
bash 使用變數查找
我有一個我不明白的問題。它很簡單,應該可以工作,但事實並非如此。=編輯了我從終端看到的內容=我有一個文件名列表:
[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
並希望通過 find 命令搜尋其路徑列表中的每個文件:
[molni@archlinux picasa_album]$ for i in `cat LIST`; do find /mnt/c/e-m10/ -name "$i"; done [molni@archlinux picasa_album]$
沒有結果,當我把它換成迴聲 $ i (to check if variable $ 我很好,它有效)
[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]$
當我手動執行此操作時,設置變數(無循環)它可以工作:
[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]$
我究竟做錯了什麼?
執行 a
cat -v LIST
以查看是否有任何通過簡單回顯看不到的特殊字元。我懷疑 DOS 行結尾,即在換行之前有多餘的輸入。編輯:轉換 LIST 文件:
dos2unix < LIST > LIST.new && mv LIST.new LIST
或者如果你沒有 dos2unix,但有 vim:
vim LIST
, then:set notx
, then:wq
以下作品:
$ mkdir /tmp/test $ cd /tmp/test $ cat > LIST << EOD > IMG_9324.JPG > IMG_9329.JPG > IMG_9463.JPG > IMG_9412.JPG > IMG_9562.JPG > IMG_9511.JPG > IMG_9607.JPG > EOD $ mkdir e $ touch e/IMG_9607.JPG $ touch e/IMG_9412.JPG $ find . . ./e ./e/IMG_9412.JPG ./e/IMG_9607.JPG ./LIST $ for i in `cat LIST`; do find e/ -name "$i"; done e/IMG_9412.JPG e/IMG_9607.JPG $
因此從上面開始,然後將 LIST 替換為實數,然後
e/
. 如果您沒有達到 for 循環的內部 Bash 限制(這應該會引發錯誤),那麼您一定是在做其他錯誤,這不在您的範例輸出中。