0

我知道我可以arr=(*.log)将所有 *.log 文件放入 arr。但是当我尝试使用更复杂模式的 extglob 时,它似乎失败了:

$ shopt -s nullglob extglob; x=([a-z][0-9].+([0-9]).*.gz); echo "${x}"; shopt -u nullglob extglob;
-bash: syntax error near unexpected token `('

但是如果没有 extglob 模式+(match),它可以工作:

$ shopt -s nullglob extglob; x=([a-z][0-9].[0-9][0-9].*.gz); echo "${x}"; shopt -u nullglob extglob;
v2.29.2.tar.gz

有什么建议吗?

4

1 回答 1

2

你必须挖掘一下,但bash wiki 说

extglob改变某些字符的解析方式。必须在和任何后续命令之间有一个换行符(不仅仅是分号)才能使用它。shopt -s extglob

将您的命令序列分成多行,它应该可以工作:

shopt -s nullglob extglob
x=([a-z][0-9].+([0-9]).*.gz)
printf "%s\n" "${x[@]}"
shopt -u nullglob extglob
于 2020-12-04T13:56:35.513 回答