目录工作区包含5个项目:
project-1
project-2
project-3
project-4
project-5
我想匹配此目录中的所有文件夹,但是当我使用变量时,不会填充数组:
workspace="~/workspace";
myDirectories=(${workspace}/project-*/);
如果我手动传递它,它会毫无问题地获取目录。
myDirectories=(~/workspace/project-*/);
我知道这是一件很简单的事情,我很想念,但这让我烦恼!
答案 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
,但这也可以将用户修复为运行脚本部分的用户,该部分可能与运行该部分不同。做目录扩展。
所有人都认为,在创建阵列时进行扩展似乎是最佳解决方案,并且上述两种解决方案都能很好地工作。