オプションなしでsetコマンドを使用すると、すべてのシェル変数と関数の名前と値が表示されます。
我々は変数を表示し、出力で関数を避けたいと思います。
ベストアンサー1
すでにコメントで指摘したように、env
これはエクスポートされた変数のみを表示するため、要件を満たしていません。
変数定義のように見えないものをフィルタリングするために出力を処理するset
ことは、信頼できないハッキングです。特に、値に改行文字を含む変数を見逃す可能性があります。さらに悪いことに、よく書かれた関数が偽変数の定義のために困難になる可能性があります。
最も簡単な解決策は、関数が(ある種の)変数として扱われないPOSIXモードに一時的に切り替えることです。
set -o posix
set
set +o posix
ただし、デフォルトモードがすでにPOSIXの場合、またはシェルが設定されているPOSIXモードでコマンドが機能するようにしたい場合は、問題が発生する可能性があります。
この場合、回避策があります。
(set -o posix;set)
これは、サブシェルで実行される組み込みコマンドに対してのみPOSIXモードを設定し、set
親シェルモードには影響しません。