扩展glob模式的最佳方法?


29

我需要以编程方式将全局模式(例如../smth*/*/etc/cron*/)扩展到文件列表中。最好的方法是什么?


2
您不需要做任何特别的事情,只需不引用*
凯文

1
虽然如果您要尝试解析它,请使用答案所示的数组。
凯文

Answers:


40

只要让它在数组声明的右侧扩展即可:

list=(../smth*/)          # grab the list
echo "${#list[@]}"        # print array length
echo "${list[@]}"         # print array elements
for file in "${list[@]}"; do echo "$file"; done  # loop over the array


请注意,nullglob需要设置shell选项。
默认情况下未设置。
万一(或多个glob中的一个)与任何名称都不匹配的情况,它可以防止错误。

在设置bash

shopt -s nullglob

zsh

setopt nullglob

然后我该如何打印该列表?
罗加奇(Rogach)2012年

它只是一个常规数组。您可以对任何数组执行任何操作。添加了一些示例。
manatwork 2012

1
这儿存在一个问题。如果pattern不匹配任何文件,它将自行打印-效果不是很好。
罗加奇2012年

5
嗯,shopt -s nullglob解决了这个问题。
罗加奇(Rogach)2012年

1
@lindhe,unsetopt以及用于的相同参数setopt
操作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.