命令:
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
答案2
您未提供的資訊是腳本中使用的命令解釋器。這由 shebang 表示,即第一行(例如#/bin/sh
)。
在 Ubuntu 中,控制台預設執行 bash 作為互動式 shell。如果您的腳本使用其他命令解釋器,例如/bin/sh,則特定於bash 的語法將無法運作。