指示:
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シェルではデフォルトで有効になっていますが、bashスクリプトで使用するには、次のように明示的に有効にする必要があります。
shopt -s extglob
答え2
提供されていない情報は、スクリプトでどのコマンド インタープリタが使用されているかです。これは、シェバン、つまり最初の行 (例: #/bin/sh
) で示されます。
Ubuntu では、コンソールはデフォルトで bash を対話型シェルとして実行します。スクリプトが別のコマンド インタープリター (/bin/sh など) を使用する場合、bash 固有の構文は機能しません。