Bashスクリプトでファイル名のパターンマッチングを実行できますか?
test
は、次のファイルがあるディレクトリです...
bob@bob-laptop:~/test$ ls
exclude exclude1 exclude2 include1 include2
コマンドラインから、一部のファイルを除外したい場合は、...
bob@bob-laptop:~/test$ echo !(exclude*)
include1 include2
しかし、そのコマンドをスクリプト(exclude
という名前)に入れると...
bob@bob-laptop:~/test$ cat exclude
echo !(exclude*)
実行するとエラーになります...
bob@bob-laptop:~/test$ ./exclude
./exclude: line 1: syntax error near unexpected token `('
./exclude: line 1: `echo !(exclude*)'
特殊文字の一部、すべて、またはなしをエスケープするすべての(私が思う)バリエーションを試しましたが、それでもエラーが発生します。
ここで何が欠けていますか?私がこれを行うことができない場合、誰かが理由を説明してくれますか?
スクリプトの先頭に Shebang 行を配置する必要があります。 Shebang行がないと、カーネルはスクリプトがbashで実行されなければならないことを知りません。参照 シェルスクリプトが失敗:構文エラー:“(”予期しない
さらに、!(…)
構文は、歴史的な理由により、デフォルトでは有効になっていません(以前のバージョンのbashではサポートされていませんでした)。 extglob
オプションを設定する必要があります。
#!/bin/bash
shopt -s extglob
echo !(exclude*)