我有一个脚本,我正在从使用 glob 填充数组的明显不好的做法切换find
到ls
使用 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")
这只适用于我的电脑。