帶有通配符和括號的 ls 在控制台中有效,但在腳本中無效

帶有通配符和括號的 ls 在控制台中有效,但在腳本中無效

命令

ls /etc/pve/lxc/*([0-9]).conf

在控制台中工作

  • 結果:文件找到!
/etc/pve/lxc/107.conf

但不在腳本中

  • #!/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 式的擴充全域。預設情況下,互動式 bash shell 啟用該功能,但要在 bash 腳本中使用它,必須使用明確啟用

shopt -s extglob

也可以看看通配符擴充功能適用於命令列,但不適用於 bash 腳本

答案2

您未提供的資訊是腳本中使用的命令解釋器。這由 shebang 表示,即第一行(例如#/bin/sh)。

在 Ubuntu 中,控制台預設執行 bash 作為互動式 shell。如果您的腳本使用其他命令解釋器,例如/bin/sh,則特定於bash 的語法將無法運作。

相關內容