Bash函数根据a / b / c / d的输入返回* a * / * b * / * c * / * d *的匹配?

时间:2016-01-08 15:55:30

标签: bash filenames completion

基本上,我想编写一个bash脚本或函数,在给定输入*a*/*b*/*c*/*d*的情况下,它会返回所有匹配,其中每个路径组件在开头和结尾都有通配符,例如: {{1}}。将tilde(〜)视为主文件夹也是很好的。

有一种简单的方法可以在bash中执行此操作,还是需要在Python之类的内容中执行此操作?

1 个答案:

答案 0 :(得分:2)

我会给你一个起点:

    require 'functions.php';
    require 'config/config.php';
    require 'db.php';

     use Blog\DB;
 $conn = DB\connect($config['DB_USERNAME'],$config['DB_PASSWORD'],$config['DATABASE']);
 if (!$conn) die('Could not Connect');

这个解决方案远非完美。具体而言,您必须解决以下问题:

  • x="a/b/c/d" x="*${x//\//*\/*}*" echo $x # output: "*a*/*b*/*c*/*d*", or all matching paths (if any) 可能包含空格或x字符等特殊字符。他们需要妥善逃脱。
  • *可能包含双斜杠。例如:x。我想你希望它成为x=a//b,而不是*a*/*b*
  • *a*/**/*b*可能包含前导或尾部斜杠。例如:xx=/a/b
  • x=a/b/可以以代字号开头。

所有这些问题都可以通过x声明和替换来解决。

另一种方法(需要更多代码,但可能更安全,更不容易出错)是使用循环解析和解释字符串,如下所示:

if

同样,这并不完美。问题包括:

  • 你必须处理双斜线。
  • 你必须处理前导和尾随斜杠。
  • 你还需要处理代字号。

这个解决方案很好,因为这些问题更易于处理,您也不必担心特殊字符。

相关问题