【发布时间】:2018-05-17 09:14:33
【问题描述】:
我正在使用 bash 4.2 开发 centOS 7,我目睹了奇怪的行为。 这是我尝试做的:
我有一个复制模板并将索引名称添加到新文件的脚本,如下所示:
原始文件夹:
- 文件1
- 文件2
到:
- 文件1
- 文件2
- index.file1
- index.file2
此外,该脚本会创建一个存储索引名称的 tmp 文件。 我想要做的是最终通过 curl 加载和发送(单独)在其名称开头具有索引名称的所有文件。
问题从哪里开始?当索引中有通配符时。 假设索引名称是 INDEX*。 新文件是:
- 文件1
- 文件2
- 索引*.file1
- 索引*.file2
- tmp (cat tmp = "INDEX*")
tmp 文件只包含 INDEX*,如果我在上面运行 cat,我会看到它。
如果我尝试将内容加载到 bash 中的变量中,如下所示:
index_name=$(<tmp)
echo index name: $index_name
结果是一个字符串,其中包含所有带有 INDEX 的文件,如下所示:
index name: INDEX*.file1 INDEX*.file2
这很奇怪,因为这不是 tmp 包含在其中的,但我尝试至少将这个字符串转换为一个数组,并且无论如何只有我需要的文件列表。 我是这样试的:
IFS=' ' read -a index_array <<< "$index_name"
它将字符串变成一个数组,其中 1 个元素 = 完整的字符串...
我猜索引名称中的通配符是导致问题的原因,所以有人知道解决方法吗?
我认为可以在不使用通配符的情况下将索引名称保存在 tmp 中,然后只加载名称中包含 INDEX 的所有文件,但这是有风险的 - 主要是因为我不能保证通配符总是在 INDEX结束。
那我该怎么办?
有没有办法让 bash 明白在这种情况下“*”应该被视为字符串而不是通配符?
如果没有,有没有办法让 bash 将字符串分隔成单独的字符串?
任何帮助将不胜感激...
谢谢!
【问题讨论】: