Linux

PIPESTATUS 變數為空

  • May 28, 2021

我正在使用 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_profilePIPESTATUS=``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

引用自:https://unix.stackexchange.com/questions/651794