![변수의 명령 출력 및 표준 출력 억제](https://linux55.com/image/106714/%EB%B3%80%EC%88%98%EC%9D%98%20%EB%AA%85%EB%A0%B9%20%EC%B6%9C%EB%A0%A5%20%EB%B0%8F%20%ED%91%9C%EC%A4%80%20%EC%B6%9C%EB%A0%A5%20%EC%96%B5%EC%A0%9C.png)
time=$(TIMEFORMAT="%R"; { time /usr/bin/time -f "\n%E elapsed" curl -s "https://example.com"; } 2>&1)
ElapsedTime=$(echo "$time" | tail -c 23)
위 명령은 예상대로 작동하지만 echo가 표준 출력으로 인쇄되는 것을 원하지 않습니다. 변수에 값을 할당하고 싶습니다.
답변1
첫 번째 할당과 두 번째 할당 사이에는 차이가 없으며 var=$(echo foo)
표준 출력에 관한 한 차이도 없습니다.
두 번째 지침에서는 다음을 수행합니다.
ElapsedTime=$(echo "$time" | tail -c 23)
명령 표준 출력(즉, 파이프로 연결된 표준 출력, 이 경우 tail
stdout)은 변수 content 및아니요화면에 표시됩니다.
반면에 내부 명령 중 하나가 표준 오류 스트림에 무언가를 출력하는 경우 stderr를 리디렉션하지 않기 때문에 화면에 표시됩니다.
이는 echo "$time"
신뢰할 수 없습니다. printf "%s\n" "$time"
예상치 못한 가치 부작용을 피하는 것이 좋습니다 time
.
tail -c -number
POSIX이므로 이 명령이 실패하는 것을 원하지 않습니다.