環境変数だけをエコーし​​、bash関数はエコーしない

環境変数だけをエコーし​​、bash関数はエコーしない

bash変数はエコーですが、bash関数はエコーしない方法はありますか?

私はこれを行うことができます

env | grep -v 'BASH_FUNC'

しかし、通常は複数行なので、関数の他の行はエコーされます。

答え1

すべての環境変数を一覧表示しますが、エクスポートした関数を一覧表示したくない場合は、次の手順に従ってください。

for n in `compgen -e`; do echo "$n=${!n}"; done

compgen -e変数の名前がここにリストされます。echo名前とその値が出力されます。値を引用する${!n@Q}代わりに使用する${!n}ファイルまたはeval

(編集:)
注:配列が含まれている場合は、配列を無視するのではなく、配列envインデックスとともに値を印刷します。0(連想配列の場合、0インデックスがないname=場合は印刷されます。)
この問題を処理する方法については、次の質問に対する回答を参照してください。このスタックオーバーフローの質問

答え2

だから私はサブシェルを使ってこれを行い、すべてのbash機能をオフにします。

   (
       # in subshell

       for line in `declare -F | awk '{print $3}'`; do
          unset -f "$line"  # unset all bash funcs
       done

        env
    )

しかし、もっと良い方法があると思います。

関連情報