引号内的通配符

  • 本文关键字:通配符 bash glob
  • 更新时间 :
  • 英文 :


>当我执行以下操作时:

rmdir /path/to/dir/*.lproj

它工作正常。

当我这样做时:

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

不起作用,并说它从字面上寻找一个以astrix符号命名的目录。通配符不会被解释。如何在报价中使其工作?

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

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

双引号内不进行通配。做

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

有关一些详细信息,请参阅此 [ 问题 ]。

你引用的是你的变量扩展,继续这样做。不好的是你试图引用你的通关语。对于外壳,您不应该引用:

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"

相关内容

  • 没有找到相关文章

最新更新