命令:
ls /etc/pve/lxc/*([0-9]).conf
在控制台中工作:
- 结果:找到文件!
/etc/pve/lxc/107.conf
但不是在脚本中:
- /bin/bash #!/bin/bash
- 结果:错误
syntax error near unexpected token `('
ls /etc/pve/lxc/*([0-9]).conf
然后我掩盖了脚本中的括号:
ls /etc/pve/lxc/*\([0-9]\).conf
- 结果:未找到文件
ls: cannot access '/etc/pve/lxc/*([0-9]).conf': No such file or directory
答案1
表达式*([0-9]).conf
是 KSH 样式扩展的 glob。此功能默认在交互式 bash shell 中启用,但要在 bash 脚本中使用它,必须使用以下方式明确启用
shopt -s extglob
答案2
您未提供的信息是脚本中使用了哪个命令解释器。这由 shebang(即第一行)指示(例如#/bin/sh
)。
在 Ubuntu 中,控制台默认运行 bash 作为交互式 shell。如果您的脚本使用其他命令解释器(例如 /bin/sh),则特定于 bash 的语法将不起作用。