PIPESTATUS変数が空です

PIPESTATUS変数が空です

私はLinuxサーバーで作業していますが、PIPESTATUS配列変数が常に空であることに気付きました。私はbash v4.1.2(1)-releaseを使用しています。

$ echo $BASH_VERSION
4.1.2(1)-release
$ false | true | false
$ echo ${PIPESTATUS[@]} # returns nothing (empty)

原因は何でしょうか?Stack Exchangeを含むオンラインフォーラムをチェックしましたが、良い答えは見つかりませんでした

答え1

これは、$PIPESTATUSスカラー変数として宣言されている場合、または配列ではないもの、または読み取り専用に設定されているものが、ユーザーまたは / 内または / を介して見つかったコードによって宣言されている場合、~/.bashrcまたは~/.bash_profileが開始されたPIPESTATUS=ときに環境にが存在していた場合に発生する可能性がbashあります。

の型、属性、値$PIPESTATUSは で確認できますtypeset -p PIPESTATUS

スカラーのままで$PIPESTATUS、パイプライン コンポーネントの終了ステータスを格納するために自動的に配列に変換されません。

$ env PIPESTATUS= bash -c 'false | true; typeset -p PIPESTATUS'
declare -x PIPESTATUS=""
$ bash -c 'PIPESTATUS=; false | true; typeset -p PIPESTATUS'
declare -- PIPESTATUS=""
$ bash -c 'typeset -A PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -A PIPESTATUS
$ bash -c 'readonly PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -r PIPESTATUS

ただしreadonly、この場合は、変数を配列に戻すか、設定を解除することで回避できます。

typeset -a PIPESTATUS # beware it can affect the scope if run from a function
unset -v PIPESTATUS

関連情報