“找到”在bash中删除多个空格

时间:2012-03-31 21:24:37

标签: bash find echo

我在bash脚本中有一行使用find搜索文件夹,并存储其路径。

该行如下:

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

它几乎可以在任何情况下工作,但是,由于某些原因,如果我搜索一个包含两个空格的文件夹,它将返回一个路径,其中所有双空格都已被切换为单个空格。

因此,如果我正在搜索名为“我的音乐”的文件夹,其中“我的”和“音乐”之间有两个空格,则会返回“我的音乐”有一个空间。

如果我直接在终端中运行完全相同的命令,我会得到正确的文件夹。

为什么会这样? (如果需要更多的代码,请告诉我。因为我从终端运行了完全相同的命令,所以看起来并不相关。现在我们不想要明显的原因。)

修改

现在正在运作。第一个eval或echo(不确定,但我的测试表明它是eval)导致输出崩溃,消除了“不必要的”间距。工作代码是:

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

1 个答案:

答案 0 :(得分: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" )"