匹配目录中的目录

时间:2016-09-24 19:57:33

标签: linux bash shell

目录工作区包含5个项目:

project-1
project-2
project-3
project-4
project-5

我想匹配此目录中的所有文件夹,但是当我使用变量时,不会填充数组:

workspace="~/workspace";

myDirectories=(${workspace}/project-*/);

如果我手动传递它,它会毫无问题地获取目录。

myDirectories=(~/workspace/project-*/);

我知道这是一件很简单的事情,我很想念,但这让我烦恼!

2 个答案:

答案 0 :(得分:3)

您在workspace变量声明中使用过引号,如:

workspace="~/workspace"

因此~不会扩展为主目录,但会按字面意思对待。

你可以:

  • ~留在引号之外(请注意,在这种情况下,引号不是绝对必要的):

    workspace=~/"workspace"
    
  • 或使用$HOME代替~

    workspace="$HOME"/workspace
    
  • 或者使用以/开头的绝对路径,例如/home/username/workspace

答案 1 :(得分:1)

~无法正常工作(扩展到用户主目录),除非它没有引用 由于*也需要不加引号扩展。

您可以将目录定义为固定字符串(删除前导~):

workspace="workingdirectory"       # or just workspace=workingdirectory

将所有扩展保留在数组定义中(两者都有效):

myDirectories=(       ~/"${workspace}/"project-*/ );
myDirectories=( "${HOME}/${workspace}/"project-*/ );

您可以使用固定目录,例如:"/home/user/$workspace/"project-*/,但在这种情况下,您将失去对运行脚本的任何当前用户的适应性而没有任何实际收益。
在定义变量~/时也可以使用workspace,但这也可以将用户修复为运行脚本部分的用户,该部分可能与运行该部分不同。做目录扩展。
所有人都认为,在创建阵列时进行扩展似乎是最佳解决方案,并且上述两种解决方案都能很好地工作。