shebang(#!/bin/sh)은 bash 스크립트의 첫 번째 줄에 배치되고, 두 번째 줄 뒤에는 일반적으로 스크립트의 기능을 설명하는 주석이 옵니다. 특별한 이유 없이 첫 번째 명령을 shebang 아래에 배치하고 주석(예: 10000행)을 배치하기로 결정했다면 어떻게 될까요? 이로 인해 스크립트 실행 속도가 느려지나요?
답변1
알아보기 위해 두 개의 쉘 파일을 만들었습니다. 각각은 shebang 줄로 시작하고 고유한 명령으로 끝납니다 date
. long.sh
댓글이 10,000줄이나 있는데 댓글 short.sh
이 하나도 없습니다. 결과는 다음과 같습니다.
$ time short.sh
Wed Nov 12 18:06:02 PST 2014
real 0m0.007s
user 0m0.000s
sys 0m0.004s
$ time long.sh
Wed Nov 12 18:06:05 PST 2014
real 0m0.013s
user 0m0.004s
sys 0m0.004s
그 차이가 0은 아니지만, 알아차릴 만큼 충분하지는 않습니다.
좀 더 극단적으로 살펴보자. 내가 very_long.sh
만들었다백만코멘트 라인:
$ time very_long.sh
Wed Nov 12 18:14:45 PST 2014
real 0m1.019s
user 0m0.928s
sys 0m0.088s
눈에 띄는 지연이 있습니다.
결론적으로
10,000줄의 댓글이 미치는 영향은 미미합니다. 백만 줄의 댓글이 있으면 상당한 지연이 발생할 수 있습니다.
생성 방법 long.sh
및very_long.sh
스크립트를 생성하기 위해 long.sh
다음 awk
명령을 사용했습니다.
echo "date" | awk 'BEGIN{print "#!/bin/bash"} {for (i=1;i<=10000;i++) print "#",i} 1' >long.sh
을 생성하려면 very_long.sh
위의 코드를 약간 수정하면 됩니다.
echo "date" | awk 'BEGIN{print "#!/bin/bash"} {for (i=1;i<=1000000;i++) print "#",i} 1' >very_long.sh
답변2
예, 이론적으로는 그렇습니다. 쉘은 모든 빈 줄을 읽고 비어 있는지 확인해야 하기 때문입니다. 그러나 효과가 너무 작아서 측정하기가 어려울 것입니다. 특히 스크립트를 실행하면 메모리에 캐시되고 입력/출력도 얻지 못하기 때문에 (다시 시작하지 않고) 반복적으로 시도하는 경우 특히 그렇습니다.