2012-03-31 35 views
0

我在bash腳本中使用find搜索文件夾並存儲其路徑。「find」刪除bash中的多個空格

線如下:

findfolder=$(eval echo $(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1")) 

和它的作品幾乎在任何情況下,但是,出於某種原因,如果我搜索了其在這兩個空格的文件夾,它會返回一個路徑,其中所有的雙重空間已被轉換爲單個空間。

所以,如果我在尋找一個文件夾名爲「我的音樂」與「我」和「音樂」之間的兩個空間,它將返回「我的音樂」一個空間。

如果我在終端直接運行完全相同的命令,我會得到正確的文件夾。

這是怎麼發生的? (讓我知道是否需要更多的代碼,因爲我從終端運行完全相同的命令,似乎並不相關,不過我們現在不需要明顯的原因牆)。

編輯:

它現在的工作。第一個eval或回聲(不確定,但我的測試表明它是eval)導致輸出崩潰,消除「不必要的」間距。工作代碼是:

findfolder="$(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1")" 
+1

有趣。但是,你需要雙$($())和evals嗎? – 2012-03-31 21:28:30

+0

@PéterVarga在使用eval之前,我沒有得到它的工作。他們解決了使用echo將變量分配給變量的問題。 – keyser 2012-03-31 21:30:13

+1

@PéterVarga我現在解決了它。第一個評估和回聲是不需要的,並正在導致崩潰。奇怪的是,我在某些時候發現他們是必要的 – keyser 2012-03-31 21:42:07

回答

3

我不明白你想用eval語句做什麼。但是,您可以嘗試引用命令替換。請注意以下兩條命令行的區別:

# the two spaces between foo and bar are collapsed 
echo $(echo "foo bar") 

# the two spaces between foo bar bar are kept 
echo "$(echo "foo bar")"