bash脚本通配符不是通配文件

时间:2013-08-30 03:15:25

标签: bash wildcard

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

我最近收到了一个用户的报告,其中表达式没有对文件进行通配。用户有一个与我不同的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

我想知道是否有人可以告诉我我失踪了什么,所以我可以依靠互联网可移植性。我在我的机器上有这个工作的几个略有不同的版本而不是另一个,我想知道什么环境变量可能导致断开连接。我没有在脚本中添加任何shopt noglob选项,我只是双引用所有与文件路径相关的变量。可能是吗?

修改:也尝试过简单

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

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

仅适用于我的电脑。

2 个答案:

答案 0 :(得分:3)

引用通配符会抑制通配。

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

但是你也需要解决所有其他问题。

答案 1 :(得分:0)

就像更新一样,事实证明我的实际脚本中的问题(不是上面的肮脏模型)是由于用户分区的格式化而导致globbing无效。

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

我将继续接受之前的回答,因为它准确地回答了所写的问题。

谢谢!