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)

可能是什麼原因?我檢查了包括堆疊交換在內的線上論壇,但沒有找到好的答案

答案1

$PIPESTATUS如果已聲明為標量變數或任何非陣列或已設為唯讀的內容,則可能會發生這種情況,無論是由您或在 / ... 中找到的程式碼還是透過您的~/.bashrc/ ... 或因為在啟動時~/.bash_profile存在於PIPESTATUS=環境中。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

相關內容