複数の実装で機能するposix互換の方法で、現在定義されている環境変数のリストをそれらの値なしで出力するにはどうすればよいですか?
一部の実装(mksh、freebsd / bin / sh)では、export
単独で使用するだけで十分です。
$ export
FOO2
FOO
ただし、他の一部の実装(bash、zsh、dash)ではexport
、値も表示されます。たとえば、bashの場合:
$ export
export FOO2='as df\
asdk=fja:\
asd=fa\
asdf'
export FOO='sjfkasjfd kjasdf:\
asdkj=fkajdsf:\
:askjfkajsf=asdfkj:\
safdkj'
$ printenv | sed -n l
FOO2=as\tdf\$
asdk=fja:\$
asd=fa\$
asdf$
FOO=sjfkasjfd kjasdf:\$
asdkj=fkajdsf:\$
\t:askjfkajsf=asdfkj:\$
safdkj$
他のオプションのような、env
またはprintenv
値のない変数名のみを出力するオプションはありません。少なくとも、私が試したlinuxおよびfreebsdプラットフォームではそうではありません。
awk / sed / etcへのパイピング。または、パラメーター展開手法(例:)を使用してリストをトリミングする${foo%%=*}
こともできますが、行をまたがる可能性が=
あり、値に空白が含まれる可能性がある値を処理する必要があります(上記の例を参照)。
特定のシェル実装に固有の回答は興味深いですが、私は主に実装間で互換性のあるものを探しています。
export -p
これを使用したいのですか?
export -p
すべてのPOSIXシェルで一貫性のある出力が得られるため、使用したいと思います。
export -p
最初の要件に適合しません-値なしで変数名のみを出力します。
export -p
。一般的なケースでは、値がのような変数である場合に備えて、適切な引用構文解析も行う必要があるため、その構文解析は記述しませんhello\nexport var=value
。すべてのPOSIXシェルで一貫した出力を提供する他のいくつかのコマンドの1つはですがenv
、その出力はビットが不足しているため解析が困難export =
です。
export -p
は、POSIXで指定されている出力を使用して、シェルでの入力にも適した出力を生成します。