2012-03-31 80 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")"