使用通配符读取字符串时出现奇怪的 bash 行为

wierd bash behavior when reading string with wildcard

我正在使用 bash 4.2 开发 centOS 7,我看到了奇怪的行为。 这是我尝试做的事情:

我有一个脚本可以复制模板并将索引名称添加到新文件,如下所示:

原始文件夹:

至:

此外,脚本会创建一个存储索引名称的 tmp 文件。 我想要做的是最终通过 curl 加载和发送(单独)所有名称开头带有索引名称的文件。

问题从哪里开始?当索引中有通配符时。 假设索引名称是 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 将字符串分成单独的字符串?

任何帮助将不胜感激...

谢谢!

Use More Quotes™:如果您引用 echo 的参数,则 glob 不会展开。