2012-10-23 80 views
1

我试图通过bash脚本做一些简单的目录修改,但我遇到了一些奇怪的行为(OSX 10.6)。Bash - 将变量`find`分配给变量时的奇怪行为

当我发出目标目录中的以下命令,我得到试图从find命令的预期结果时,搜索刚刚目录/文件夹,即:

find . -iname "*" -type d 

Results: 
dir1 
dir2 
dir3 

然而,当我尝试给结果给一个变量,并打印出来,我得到了一些非常不同的行为:

myvar=$(find . -iname "*" -type d) 
echo $myvar 

Results: 
dir1 
dir2 
dir3 
dir3 
dir3 
dir3 

是否有意义,最终的条目被重复多次?我现在可以通过将输出管道输出到sort -u来弥补,但我想知道这个问题的根源。

谢谢。

+1

是什么的'找到.'输出? –

+1

你可以尝试将'$(...)'放在双引号中吗?不知道它是否会帮助,虽然... –

+0

@JanitoVaqueiroFerreiraFilho试过,没有运气。 – DevNull

回答

-1

我认为这与find命令中的输出错误有关。现在,它的显示如下:

myvar=$(find . -iname "*" -type d) 
echo $myvar 
Results: 
dir1 
dir2 
dir3 
dir3/subdir1 
dir3/subdir2 
dir3/subdir3 

当先前显示:

Results: 
dir1 
dir2 
dir3 
dir3 
dir3 
dir3 

我不知道为什么没有被显示的子目录,但我保证,我并不需要使用sort -u现在通过指定深度,以及:

myvar=$(find . -iname "*" -type d -maxdepth 1) 
Results: 
dir1 
dir2 
dir3 
3

使用

echo "$myvar" 

验证输出。没有括号,*可能会被评估。