匹配目录中的目录

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

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

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

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

如果我手动通过它拿起没有问题的目录。

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

我知道这是简单的我想念的东西,但它是窃听我!

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

 workspace="~/workspace" 

所以~不会被扩展为主目录,而是被直接处理。

您可以:

  • ~外引号(请注意,在这种情况下,引号不是必须的):

     workspace=~/"workspace" 
  • 或者使用$HOME而不是~

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

除非不加引号,否则~不能正常工作(展开到用户主目录)。
作为一个*还需要不受限制地扩展。

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

 workspace="workingdirectory" # or just workspace=workingdirectory 

并将所有扩展留给数组定义(两个工作):

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

你可以使用固定的目录,比如"/home/user/$workspace/"project-*/但是在这种情况下,你将失去对任何运行脚本的用户的适应性。
在定义变量workspace的时候也可以使用~/ ,但是也可以将用户修改为运行该脚本部分的用户,这可能与进行目录扩展的用户不一样。
所有考虑到,在创建阵列时扩大似乎是最好的解决方案,并且上述两个解决方案都运行良好。