我有一个持有这条路径的 shell 变量
/usr/share/man/man1/bitmap.1
可能有一个名为 bitmap.1 的文件,但也可能是 bitmap.1.z、bitmap.1.gz、bitmap.1.Z。
现在我想将真实文件传递给一个函数,同时解析正确的文件,比如
function process {
# do something
}
path="/usr/share/man/man1/bitmap.1"
process ${path}.(z|Z|gz) # here the shell shall resolve the real filename
有没有办法优雅地做到这一点,或者我必须测试 bitmap.1、bitmap.1.z 等是否退出,然后将该文件传递给函数???
忘了说我仅限于 Bourne-Shell,所以手头没有 Brace Expansion -,-。
如果您知道可能的扩展名列表,您可以执行以下操作:
我相信克里斯蒂安走在正确的轨道上。如果您确定路径的至少一部分,使用 Bash 的内置 globbing 将产生与您的模式匹配的任何文件。
例如,我的 .profile 中有一个函数,我经常使用它来分类 gzip 压缩和纯文本日志文件:
我会这样称呼:
因为通配可以产生多个结果,所以您的“过程”函数应该能够对多个参数进行操作。在我的示例中,您可以通过遍历 $@ 中的每个参数来了解我是如何做到这一点的。
您仍然可以在 Bourne Shell 中进行 globbing
尽可能多地编写 shell 脚本以限制 Bourne shell 语法是个好主意;最大限度地提高便携性。在许多情况下,它还可以提高速度。
当你只有一个文件时,你可以使用 bash globbing
process ${path}*