我在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" )"
答案 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" )"