【问题标题】:Iterate Over Files in Variable Path (Bash)迭代变量路径中的文件(Bash)
【发布时间】:2018-06-26 13:38:46
【问题描述】:

我一直在寻找迭代变量路径中文件的最佳方法,但遇到了this 问题。

但是,这个和我发现的所有其他解决方案都使用文字路径而不是变量,我相信这是我的问题。

for file in "${path}/*"
do
     echo "INFO - Checking $file"
     [[ -e "$file" ]] || continue
done

即使目录中肯定有文件(如果我将其中一个文字路径代替${path},我会得到预期的结果),这始终只迭代一次,并且 $file 的值始终是${path}/* 的字面值,没有任何通配符。

我做错了什么?

【问题讨论】:

  • 保留 * 外部引号:for file in "$path/"*
  • @anubhava 就是这样!如果您想将其发布为答案,我将很乐意接受。我猜双引号内的变量不会发生通配符?

标签: bash shell glob


【解决方案1】:

在 shell 的引号(单引号和双引号)内不会发生全局扩展。

您应该使用以下代码:

for file in "$path"/*; do
     echo "INFO - Checking $file"
     [[ -e $file ]] || continue
done

【讨论】:

  • 请参阅this thread,了解有关在使用 glob 进行迭代时如何处理空目录的更多提示。
猜你喜欢
  • 1970-01-01
  • 2014-03-15
  • 2013-03-23
  • 2013-12-10
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多