私は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_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