「myfile」以外の現在のディレクトリのすべてのエントリを削除するには、次のようにします。
rm -r !("myfile")
cleanup
しかし、スクリプト(と呼ばれる)に入れると、次のようになります。
#!/bin/bash
rm -r !("myfile")
私は得る:
pi@raspberrypi:~/tmp $ ./cleanup
./cleanup: line 2: syntax error near unexpected token `('
./cleanup: line 2: `rm -r !("file2")'
走れば
ps -p $$
私の端末がbashを使用しているのがわかります。
PID TTY TIME CMD
1345 pts/3 00:00:02 bash
だから問題が何であるかよくわかりません。
メモ:
- 私は気づいたもしスクリプトは実際に動作し、それ自体が削除されます。したがって、私のスクリプトは実際には次のように見えますが、
rm -r !("cleanup"|"myfile")
エラーメッセージは同じです。 - ブロック引用符が示すように、これはDebianベースのRaspbianオペレーティングシステム(9-stretch)です。
- この質問は重複しているようですが、見つかりませんでした。似た名前があります。質問しかし、変数の継承に関するものなので、問題は解決されません。
ベストアンサー1
パターンは!(pattern-list)
グローバル拡張。多くのディストリビューションでは、対話型シェルではこれを有効にしますが、非対話型シェルでは有効にしません。確認できます
$ shopt extglob
extglob on
$ bash -c 'shopt extglob'
extglob off
スクリプトを変更するには、スクリプトを有効にする必要があります。
shopt -s extglob
その始めに。