PIPESTATUS 변수가 비어 있습니다.

PIPESTATUS 변수가 비어 있습니다.

저는 Linux 서버에서 작업 중인데 PIPESTATUS 배열 변수가 항상 비어 있는 것을 발견했습니다. 나는 bash v4.1.2(1)-릴리스를 사용하고 있습니다.

$ echo $BASH_VERSION
4.1.2(1)-release
$ false | true | false
$ echo ${PIPESTATUS[@]} # returns nothing (empty)

이유는 무엇입니까? 스택 교환을 포함한 온라인 포럼을 확인했지만 좋은 답변을 찾지 못했습니다.

답변1

$PIPESTATUS스칼라 변수로 선언되었거나 배열이 아니거나 읽기 전용으로 설정된 변수(/...에 있는 코드나 /...에 의해 또는 환경에 존재하기 때문에 ~/.bashrc) 로 선언된 경우 시작 ) 이런 일이 발생할 수 있습니다.~/.bash_profilePIPESTATUS=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

관련 정보