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

相关内容