【发布时间】:2015-08-18 03:37:55
【问题描述】:
这是我为 POSIX shell 编写的 shell 脚本。我的目标是 POSIX shell 兼容性。有一个 PATTERNS 变量包含冒号分隔的全局模式。此变量是用户输入。我无法改变这一点。其余代码是我的代码,我可以更改它以实现我的目的。下面的小演示程序的目的是将每个 glob 模式记录(或显示)在单独的行上。
PATTERNS=*.*:*.txt:*.html
IFS=:
for pattern in $PATTERNS
do
unset IFS
echo Pattern: "$pattern"
done
这是当前工作目录。
$ ls
a.txt b.txt foo.sh
当我运行代码时,我得到了这个输出。
$ sh foo.sh
Pattern: a.txt
Pattern: b.txt
Pattern: foo.sh
Pattern: a.txt
Pattern: b.txt
Pattern: *.html
它不是在一行中显示每个 glob 模式,而是在一行中显示与 glob 模式匹配的每个文件。由于*.html 与当前目录中的任何文件都不匹配,因此只根据需要显示了这个 glob 模式。
我想要的输出是:
Pattern: *.*
Pattern: *.txt
Pattern: *.html
所以我希望不将 glob 模式扩展到当前目录中的文件名中。我怎样才能做到这一点?该解决方案必须适用于任何 POSIX shell。
【问题讨论】: