引号内的通配符

时间:2016-06-01 08:38:01

标签: bash terminal osx-elcapitan

当我执行以下操作时:

rmdir /path/to/dir/*.lproj

它工作正常。

当我这样做时:

APP_RESOURCES="/path/to/dir"
rmdir "$APP_RESOURCES/*.lproj"

它不起作用,并说它实际上寻找一个以astrix-symbol命名的目录。通配符不会被解释。如何在报价单内工作?

3 个答案:

答案 0 :(得分:4)

扩展由shell处理,因此您必须编写如下内容:

APP_RESOURCES="/path/to/dir"
rmdir "${APP_RESOURCES}/"*.lproj

答案 1 :(得分:3)

双引号内没有完成全局操作。做

APP_RESOURCES="/path/to/dir"
rmdir "$APP_RESOURCES"/*.lproj

有关详细信息,请参阅此[ question ]

答案 2 :(得分:2)

您正在引用变量扩展,继续这样做。不好的是,你试图引用你的全局。对于shell到glob,你不应该引用:

app_resource="/path/to/dir"
rmdir "$app_resource"/*.lproj

但是如果找不到匹配项,这仍会扩展到/path/to/dir/*.lproj,请考虑以下事项:

% app_resource="/path/to/dir"
% echo "$app_resource/something/that/doesnt/exists/"*.abc
/path/to/dir/something/that/doesnt/exists/*.abc

另一种方法是检查文件/目录是否存在:

app_resource="/path/to/dir"
dir_to_remove="$app_resource/"*.lproj
[ -d "$dir_to_remove" ] && rmdir "$dir_to_remove"