背景:
我正在编写一个必须接收这些参数的 bash 脚本:
- 文件名(包含一组规则的文件)
- 文件名列表(要处理的文件,可以使用通配符)
- 目标文件夹(将存储文件的处理版本)
理论上有 3 个参数,但实际上第二个参数会扩展,因此如果通配符匹配多个文件,参数的实际数量会有所不同:
当我打电话时
./myscript file.conf *.data dest_foder
*.data
扩展到与通配符匹配的多个文件,因此它相当于:
myscript file.conf this.data that.data so.data dest_foder
在处理之前,我需要验证最后一个参数是文件夹而不是文件。
问题
如果我省略目标文件夹,例如:
myscript file.conf *.data
验证?# -ge 3
通过是因为通配符返回多个项目,并且如果恰好存在与通配符匹配的文件夹, like this_is_a_folder.data
,那么展开式就是这样:
myscript file.conf this.data that.data so.data this_is_a_folder.data
该脚本将工作,但以非预期的方式...它将处理this.data, that.data and so.data
并将文件的处理版本放入文件夹中this_is_a_folder.data
.
Question
- 我该如何避免这种情况?
- 如何验证目标文件夹是否作为参数显式传递,而不是第二个参数中通配符扩展的乘积?
在将文字“*.data”参数扩展为匹配的文件名之前,我无法找到一种方法来读取它。
澄清:
我知道如何阅读最后一个论点。
- 但我如何知道最后一个参数是否已明确传递,或者产品是否是通配符扩展?