【发布时间】:2020-12-09 17:46:00
【问题描述】:
这是我的问题:我有一个名称列表,每行 1 个,可以匹配或不匹配系统上的某些文件。 我想使用元字符来匹配系统上的文件。
如果我有两个名称的列表:“a b c”和“re*”,并且在我的系统上有 3 个文件:reinc recsa reini
我想编写一些代码来处理 2 个参数“a b c”和“re*”,并获取文件列表每行一个。 我尝试的是错误的,结果我成功了
a
b
c
reinc
recsa
reini
或
a b c
reinc recsa reini
但似乎不可能得到
a b c
reinc
recsa
reini
你有什么想法吗?
我尝试过的示例:
$ ls
list recsa reinc reini
$ cat list
a b c
re*
$ cat list | while read name; do echo $name; done
a b c
recsa reinc reini
$ cat list | while read name; do for file in $name; do echo "$file"; done; done
a
b
c
recsa
reinc
reini
$
【问题讨论】:
-
很难理解您的输入和输出。我猜你的系统上有六个文件,“a b c reinc recsa reini”。如果他们被命名为别的东西怎么办?您要执行什么一般任务?
-
你能澄清一下吗?你想写一个 bash 脚本吗?什么是“两个名字”?那会是那个脚本的论据吗?这两个参数与文件有何关系?如果两个参数中的任何一个是文件名的前缀,或者它只是第二个参数,是否应该打印文件名?您对前缀感兴趣,还是有不同的逻辑?
-
你好,我在帖子里加了一个例子
-
所以你有两行,每一行都是一个参数列表。您希望第一行逐字回显,第二行进行外壳扩展,每个结果都在新行上。文件中的行数会超过两行吗?第二行是否会包含多个模式?第一行会包含元字符,还是只包含文字字符串?
-
这项任务需要很长时间才能描述,所以我将问题简化为对我来说有问题的问题。为了简化我这样做是因为我将通过 ssh 将结果传递给 tar 命令的 STDIN。我想扩展元字符,例如? * [],并处理带有空格的名称。文件可能存在也可能不存在,如果没有文件,结果有 re* 就可以了
标签: bash shell wildcard spaces