我正在尝试从 迁移bash到fish.
什么是fish的模拟shopt?我正在尝试从我的.bashrc以下内容中模仿这一行:
shopt -s dotglob # for mv * see hidden files
Run Code Online (Sandbox Code Playgroud)
这是故意的。大多数情况下,用户不希望意外匹配ls(没有-a)不可见的隐藏文件。通常,隐藏文件是有原因的,而不仅仅是为了欺骗您。另外,如果*要匹配隐藏文件,匹配非隐藏文件就太棘手了。
但是,与 bash 不同的shopt -s dotglob是不需要匹配隐藏文件。在 bash 中,shopt -s dotglob是匹配目录中每个文件而不会意外匹配.或的唯一方法..。但是,fish shell 永远无法匹配.或..与 glob匹配,因此这不是问题(如果您真的需要匹配.或..出于某些愚蠢的原因,只需明确地说出来)。此外,fish 试图通过设计避免有选项,所以它没有dotglob.
要匹配目录中的每个文件,您可能需要使用括号扩展来检测以点开头的文件以及不以点开头的文件。{.,}是匹配可能存在或可能不存在的点的括号扩展。它后面的星星匹配一切。因为鱼中的 globs 不能匹配.or ..,下面的代码匹配除了这两个目录之外的所有内容(如果你使用下面的代码,bash 很遗憾地匹配)
cat {.,}*
Run Code Online (Sandbox Code Playgroud)