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