ワイルドカードと括弧を使用した 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]).confKSHスタイルである拡張グロブこの機能は対話型bashシェルではデフォルトで有効になっていますが、bashスクリプトで使用するには、次のように明示的に有効にする必要があります。

shopt -s extglob

参照コマンドラインでは機能するが、bash スクリプトでは機能しないワイルドカード拡張

答え2

提供されていない情報は、スクリプトでどのコマンド インタープリタが使用されているかです。これは、シェバン、つまり最初の行 (例: #/bin/sh) で示されます。

Ubuntu では、コンソールはデフォルトで bash を対話型シェルとして実行します。スクリプトが別のコマンド インタープリター (/bin/sh など) を使用する場合、bash 固有の構文は機能しません。

関連情報