引号内的通配符
Wildcard within quotations
当我执行以下操作时:
rmdir /path/to/dir/*.lproj
它工作正常。
当我这样做时:
APP_RESOURCES="/path/to/dir"
rmdir "$APP_RESOURCES/*.lproj"
它不起作用,并说它实际上是在寻找一个以星号命名的目录。通配符不会被解释。如何使其在引号内起作用?
扩展由 shell 处理,所以你必须这样写:
APP_RESOURCES="/path/to/dir"
rmdir "${APP_RESOURCES}/"*.lproj
双引号内没有通配符。做
APP_RESOURCES="/path/to/dir"
rmdir "$APP_RESOURCES"/*.lproj
查看此了解详情。
您正在引用您的变量扩展,请继续这样做。坏事是你试图引用你的 globbing。对于 shell 你不应该引用:
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
一种解决方法是检查 file/directory 是否存在:
app_resource="/path/to/dir"
dir_to_remove="$app_resource/"*.lproj
[ -d "$dir_to_remove" ] && rmdir "$dir_to_remove"
当我执行以下操作时:
rmdir /path/to/dir/*.lproj
它工作正常。
当我这样做时:
APP_RESOURCES="/path/to/dir"
rmdir "$APP_RESOURCES/*.lproj"
它不起作用,并说它实际上是在寻找一个以星号命名的目录。通配符不会被解释。如何使其在引号内起作用?
扩展由 shell 处理,所以你必须这样写:
APP_RESOURCES="/path/to/dir"
rmdir "${APP_RESOURCES}/"*.lproj
双引号内没有通配符。做
APP_RESOURCES="/path/to/dir"
rmdir "$APP_RESOURCES"/*.lproj
查看此
您正在引用您的变量扩展,请继续这样做。坏事是你试图引用你的 globbing。对于 shell 你不应该引用:
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
一种解决方法是检查 file/directory 是否存在:
app_resource="/path/to/dir"
dir_to_remove="$app_resource/"*.lproj
[ -d "$dir_to_remove" ] && rmdir "$dir_to_remove"