Linuxのコマンドラインまたはシェルスクリプトから予約文字をエスケープする方法は?

Linuxのコマンドラインまたはシェルスクリプトから予約文字をエスケープする方法は?

私たち全員が知っているように、文字(!)は予約されています。奇妙なことは、通常のユーザーには機能しますが、rootでは機能しないことです。問題を解決するためにいくつかの方法を試しましたが、成功しませんでした。これらをエスケープできるかどうかを知りたいです。文字。

私が実行したいコマンドは単純で、いくつかの特定のファイルを無視します。

 mkdir --parents www/; mv !(init.sh|environment.sh|docs|www) $_

ベストアンサー1

役割を避けることではありません!

シェルはkshいくつかの拡張されたワイルドカードパターンを実装し、これが!(...|...|...)その1つです。このパターンは、括弧内のパターンと一致しないすべての項目と一致します。

一部のシェルはワイルドカードパターンを使用できますksh。たとえば、シェル()extglobでシェルオプションを設定すると、シェル()でシェルオプションを設定するのとbash同じように、これらの機能が有効になります。shopt -s extglobKSH_GLOBzshsetopt KSH_GLOB

rootユーザーが使用しているシェルは明らかにkshglobbingパターンの使用をサポートしておらず、可能であるかどうかはわかりません(dashつまり、シェルにはこの機能がありません)。一方、通常のユーザーは、実際のkshシェルを実行したり、シェル初期化ファイルで正しいシェルオプションを明示的に有効にしたり、一部のサードパーティの拡張機能を使用して自動的にこれらのモードをデフォルトで有効にしたりするようです。シェルオプションはデフォルトで有効になっています。

おすすめ記事