扩展文件通配符在 bash 脚本中无法与 cat 一起使用

Fra*_*a ت 6 shell bash shell-script wildcards

当我在终端中输入

cat ~/my/+(a|b)/doc
Run Code Online (Sandbox Code Playgroud)

它从 ~/my/a/doc 和 ~/my/b/doc 读取都正常,但是当我将该命令放入bash脚本时:

#!/bin/bash
cat ~/my/'+(a|b)'/doc
Run Code Online (Sandbox Code Playgroud)

我收到错误:

cat: ~/my/+(a|b)/doc: No such file or directory
Run Code Online (Sandbox Code Playgroud)

不能在bash脚本中使用扩展通配符吗?

man*_*ork 9

你必须打开extglob

#!/bin/bash
shopt -s extglob
cat ~/my/+(a|b)/doc
Run Code Online (Sandbox Code Playgroud)

+()是一个扩展模式,只有在extglob启用时才被识别。默认情况下extglob,在交互式 shell 中打开,在非交互式 shell 中关闭。