bashshell脚本-列出cmd行arg中指定的特定模式的文件



我正在制作一个通用的bash脚本,其输入$1是它想要iter通过的文件模式。现在我有

for entry in ./$1; do
  echo "$entry"
done

但当我运行这个时,我会得到

$ ./stuff.sh PRM*
./PRM.EDTOUT.ZIP

尽管存在许多模式PRM*的文件。有没有办法在命令行参数中指定此模式,并正确列出相同模式的所有文件?

调用./stuff.sh PRM*时,外壳会将PRM*扩展到匹配的文件。如果你想在不扩展的情况下通过模式,那么你必须引用它:

./stuff.sh 'PRM*'

但实际上,最好只是让shell扩展它(不要引用它,像在你的例子中那样使用它(,而是更改你的脚本以接受多个参数,比如:

for entry; do
  echo "$entry"
done

没错,for entry之后没有"in"。不需要。在没有"in"子句的情况下,for循环默认使用位置参数。换言之,上述内容相当于:

for entry in "$@"; do
  echo "$entry"
done

最新更新