Linux
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)
可能是什麼原因?我檢查了包括堆棧交換在內的線上論壇,但沒有找到好的答案
如果
$PIPESTATUS
已將其聲明為標量變數或任何非數組或已設為只讀,則可能發生這種情況,無論是由您或在您的~/.bashrc
/~/.bash_profile
…PIPESTATUS=``bash
$PIPESTATUS
您可以檢查with的類型、屬性和值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