String
將文件夾名稱與文本文件中的行進行比較
我正在嘗試將目錄名稱與文本文件中的一行進行比較。然而,即使目錄名稱和文本文件中的行相同,我似乎也無法讓它們“相等”。
#!/bin/bash for dir in /mnt/hgfs/VM/Command_for_Dozing_Logs/*/ do dir=${dir%*/} dir=${dir:(-10)} echo "Dir:$dir:" while read p; do echo "File:$p:" if [ "$dir" == "$p" ] then echo "Variables are equal!" fi done </mnt/hgfs/VM/copiedFolders.txt done
我要匹配的文件夾位於Command_for_Dozing_Logs文件夾中。其中的文件夾是:
2015.07.07 2015.07.08
我的文本文件是這樣的:
2015.07.08 2015.05.23
所以應該至少有一場比賽,對吧?但不是。我得到這個作為我的輸出:
Dir:2015.07.07: :ile:2015.07.08 :ile:2015.05.23 Dir:2015.07.08: :ile:2015.07.08 :ile:2015.05.23
我真的很困惑這裡發生了什麼。為什麼那個冒號會替換第一個字母?如何讓兩個變數匹配?
原因是(幾乎可以肯定)因為
CR
文件中每一行的末尾都有一個字元。這是在 Windows 和 Mac 系統上創建的典型文件;基於 Linux/Unix 的系統NL
用作行結束符。您可以使用此命令修復您的文件,允許您使用
/tmp/fixed_copiedFolders.txt
而不是原始文件。tr -d '\015' < /mnt/hgfs/VM/copiedFolders.txt > /tmp/fixed_copiedFolders.txt
或者,您可以直接將其合併到您的腳本中:
#!/bin/bash for dir in /mnt/hgfs/VM/Command_for_Dozing_Logs/*/ do dir=${dir%*/} dir=${dir:(-10)} echo "Dir:$dir:" tr -d '\015' </mnt/hgfs/VM/copiedFolders.txt | while read p; do echo "File:$p:" if [ "$dir" == "$p" ] then echo "Variables are equal!" fi done done