带有通配符和括号的 ls 在控制台中有效,但在脚本中无效

带有通配符和括号的 ls 在控制台中有效,但在脚本中无效

命令

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

也可以看看通配符扩展在命令行中有效,但在 Bash 脚本中无效

答案2

您未提供的信息是脚本中使用了哪个命令解释器。这由 shebang(即第一行)指示(例如#/bin/sh)。

在 Ubuntu 中,控制台默认运行 bash 作为交互式 shell。如果您的脚本使用其他命令解释器(例如 /bin/sh),则特定于 bash 的语法将不起作用。

相关内容