Bash - 将`find`结果赋给变量时的奇怪行为

时间:2012-10-23 12:29:50

标签: macos bash shell find

我试图通过bash脚本进行一些简单的目录修改,但我遇到了一些奇怪的行为(OSX 10.6)。

当我在目标目录中发出以下命令时,我在尝试搜索目录/文件夹时从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来解决这个问题,但我想知道这个问题的根本原因。

谢谢。

2 个答案:

答案 0 :(得分:3)

使用

 echo "$myvar"

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

答案 1 :(得分:0)

我认为它与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