PIPESTATUS変数が空です。

PIPESTATUS変数が空です。

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

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

なぜですか?スタック交換を含むオンラインフォーラムを確認しましたが、良い答えが見つかりませんでした。

答え1

$PIPESTATUSこれは、スカラー変数として宣言されているか、配列ではないか、読み取り専用に設定された変数(/ ...内のコードまたは/ ...によって、または環境に存在するため)として宣言されている~/.bashrc場合に発生します。~/.bash_profilePIPESTATUS=bash

検査できるタイプ、属性、および$PIPESTATUStypeset -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

関連情報