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
)
しかし、もっと良い方法があると思います。