0

我有一个脚本,我正在从使用 glob 填充数组的明显不好的做法切换findls使用 glob。

我最近收到一个用户的报告,其中表达式没有对文件进行通配。该用户的 Linux 发行版与我不同,但GNU bash, version 4.2.45(1)-release在这两种情况下都调用了脚本。我尝试了一堆不同的变体,它们在我的 shell 中有效,但在他们的 shell 中无效。这是最新的:

 declare -a ARRAY
 GLOB="keyword"
 VAR=("path/to/file/*${GLOB}*")
 ARRAY+=("$VAR")

但是我的日志表明

$ echo ${ARRAY[*]}
  path/to/file/*keyword*

使用未扩展的通配符,而不是预期/期望

$ echo ${ARRAY[*]}
  13_keyword_$23.txt
  14_keyword_$24.txt
  ...

VAR路径填充了变量,但它正在正确扩展并且文件存在。该目录包含一堆文件,如17_keyword_$22.txt.

我想知道是否有人可以告诉我我缺少什么,以便我可以依靠跨 bash 可移植性。我的机器上有几个稍微不同的版本,但另一个版本没有,我想知道是什么环境变量可能导致断开连接。我没有shopt noglob在脚本中添加任何选项,我只是双引号所有文件路径相关的变量。会是这样吗?

编辑:也简单地尝试过

 ARRAY+=(path/to/file/*'keyword'*.txt

或者

GLOB=(path/to/file/*keyword*)
ARRAY+=("$GLOB")

这只适用于我的电脑。

4

2 回答 2

3

引用通配符会禁止通配符。

VAR=("path/to/file/"*"$GLOB"*)

但是您还需要解决所有其他问题。

于 2013-08-30T03:16:54.713 回答
0

就像更新一样,事实证明,我的实际脚本(不是上面的粗鲁模型)中的问题是由于用户分区的格式设置,通配符无法正常工作。

我使用 ext3、ext4 和 fat32 的结果很好。但是 NTFS 格式的分区以不同的方式处理 globbing。至少,我认为问题出在 globbing 上。我还没有解决原来的问题,但至少我可以简单地推荐一个不同的分区。

我将继续接受较早的答案,因为它准确地回答了书面问题。

谢谢!

于 2013-11-06T05:46:15.333 回答