setコマンドでマークされた機能を削除するには? [コピー]

setコマンドでマークされた機能を削除するには? [コピー]

オプションなしでsetコマンドを使用すると、すべてのシェル変数と関数の名前と値が表示されます。

我々は変数を表示し、出力で関数を避けたいと思います。

ベストアンサー1

すでにコメントで指摘したように、envこれはエクスポートされた変数のみを表示するため、要件を満たしていません。

変数定義のように見えないものをフィルタリングするために出力を処理するsetことは、信頼できないハッキングです。特に、値に改行文字を含む変数を見逃す可能性があります。さらに悪いことに、よく書かれた関数が偽変数の定義のために困難になる可能性があります。

最も簡単な解決策は、関数が(ある種の)変数として扱われないPOSIXモードに一時的に切り替えることです。

set -o posix
set
set +o posix

ただし、デフォルトモードがすでにPOSIXの場合、またはシェルが設定されているPOSIXモードでコマンドが機能するようにしたい場合は、問題が発生する可能性があります。

この場合、回避策があります。

(set -o posix;set)

これは、サブシェルで実行される組み込みコマンドに対してのみPOSIXモードを設定し、set親シェルモードには影響しません。

おすすめ記事