라인의 환경 변수가 시간 출력을 엉망으로 만듭니다.

라인의 환경 변수가 시간 출력을 엉망으로 만듭니다.

이것 좀 봐

$ time echo 1
1

real    0m0.000s
user    0m0.000s
sys     0m0.000s
$ TESTVAR=TEST time echo 1
1
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 1932maxresident)k
0inputs+0outputs (0major+74minor)pagefaults 0swaps

변수를 미리 내보내서 이 문제를 해결했지만 그 이유를 알고 싶습니다.

(우분투와 배쉬)

답변1

이 형식을 사용하면 ENV=valbash 내장 명령과 다른 명령을 실행합니다 time(거기서 GNU 시간 프로그램을 실행합니다 /usr/bin/time).

내장 쉘을 사용하려면 다음과 같이 사용할 수 있습니다.

$ time TESTVAR=TEST echo 1
1

real    0m0.000s
user    0m0.000s
sys     0m0.004s

$ time TESTVAR=TEST printenv TESTVAR
TEST

real    0m0.003s
user    0m0.004s
sys     0m0.000s

답변2

이는 최근 질문의 이유와 밀접한 관련이 있습니다.POSIX Shell Grammar의 중괄호 명령 그룹에서 여는 중괄호 뒤에 공백이 필요한 이유는 무엇입니까?

time등은 {예약어이므로 변수 할당 후에는 나타날 수 없습니다.

bash-5.0$ foo=bar { echo $foo; }
bash: syntax error near unexpected token `}'
bash-5.0$ foo=bar if true; then echo; fi
bash: syntax error near unexpected token `then'
bash-5.0$ foo=bar if true
bash: if: command not found

time에서는 예약어로 인식되지 않으므로 일반적인 TESTVAR=TEST time echo 1명령 실행을 수행하고 별칭, 함수 및 (이 경우 궁극적으로) 외부 명령 실행을 찾습니다.

관련 정보