我有一个脚本,我从使用find
或ls
填充数组的明显不好的做法切换到使用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")
仅适用于我的电脑。
答案 0 :(得分:3)
引用通配符会抑制通配。
VAR=("path/to/file/"*"$GLOB"*)
但是你也需要解决所有其他问题。
答案 1 :(得分:0)
就像更新一样,事实证明我的实际脚本中的问题(不是上面的肮脏模型)是由于用户分区的格式化而导致globbing无效。
我使用ext3,ext4和fat32获得了很好的结果。但是NTFS格式化的分区以不同的方式处理了globbing。至少,我认为这是问题所在。我还没有解决原始问题,但至少我可以简单地推荐一个不同的分区。
我将继续接受之前的回答,因为它准确地回答了所写的问题。
谢谢!