環境名が存在しないため、printenvはエラーコード1で終了しました。

環境名が存在しないため、printenvはエラーコード1で終了しました。

私はLinuxMint(CentOSも試しています)を使用しており、printenvコマンドを使用して存在または存在しない可能性がある環境変数を設定しようとしました。したがって、存在する場合はその名前の値を印刷し、それ以外の場合は終了コード0を返す以外は何も印刷したくありません。

ただし、存在しない環境名で呼び出すと、エラーコード1で終了します。この動作はprintenvのマニュアルページやヘルプに文書化されていません。

私が試したことは次のとおりです。

> /usr/bin/printenv foo

返されたら、次の操作を行います。

> echo $?

返品:

1

printenvのバージョンは次のとおりです。

printenv (GNU coreutils) 8.25
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David MacKenzie and Richard Mlynarik.

私が望むことを達成する他の方法がある人はいますか?最終的に環境変数がある場合は、その値を含むようにbash変数を設定し、そうでない場合はbash変数を削除します。

mybashv=`printenv foo`

ベストアンサー1

printenvの情報文書には、終了コードについて次のように記載されています。

 0 if all variables specified were found
 1 if at least one specified variable was not found
 2 if a write error occurred

これは観察されたものと一致しているようです。

私が理解したことが正しいなら、このステータスコードを隠したいと思います。すべてのコマンドにを追加するだけです|| true。たとえば、次のようになります。

$ var=`printenv foo || true`
$ echo $?
0

おすすめ記事