Bash for循环遍历包含' *'

时间:2017-02-05 15:06:03

标签: bash environment-variables

我在迭代包含文件模式列表的环境变量时遇到了问题。

实施例:     " FILEPATTERN = * .xml * .log"

代码:

local log_file_pattern=(${FILEPATTERN})
for (( i=0; i < ${#log_file_pattern}; i++ ))
do
  pattern="${log_file_pattern[$i]}"
  ... some more code ...
done

我总是得到:

    第一次迭代时
  • pattern = * .xml
  • pattern = anaconda-post.log on second iteration

如何停止循环解释* .log?

1 个答案:

答案 0 :(得分:1)

我相信FILEPATTERN设置为*.xml *.log

问题出在这一行:

local log_file_pattern=(${FILEPATTERN})

由于您没有在${FILEPATTERN}周围使用双引号,因此shell globbing有效。似乎您的目录中没有与*.xml匹配的文件,而*.log确实扩展为某些文件名。这就是为什么您的数组元素0设置为*.xml而元素1设置为anaconda-post.log的原因。

您可以使用read命令加载数组来解决问题:

local log_file_pattern
read -r -a log_file_pattern <<< "$FILEPATTERN"

*.xml加载到元素0和*.log加载到数组的元素1,而不进行通配。