GN⁺: "테스트, [, 그리고 [[ (2020)" - 기술명칭 유지
(jmmv.dev)유닉스 시스템의 흥미로운 이진 파일
- 유닉스 시스템에는 이름이 단일 기호인 이진 파일이 존재함.
-
/bin/[
명령어를 실행하면[
라는 이름의 프로그램을 확인할 수 있음. -
[
와test
는 같은 이진 파일을 가리키며, 두 명령어는 실제로 동일한 기능을 수행함.
test
프로그램과 [
의 사용
-
test
프로그램은 쉘에서 표현식을 평가하는 데 사용됨. - 문자열 비교, 숫자 비교, 파일 조건 확인 등을 위해 사용됨.
-
test
는 인자를 받아 표현식을 평가하고, 참이면 0을, 거짓이면 1을 반환함.
두 명령어의 존재 이유
-
test
와[
두 명령어가 존재하는 이유는 명확하지 않으나, 가독성을 높이기 위한 것으로 추측됨. -
[
명령어를 사용하면test
보다 더 깔끔하게 조건문을 표현할 수 있음. -
[
를 사용할 때는 명령어의 마지막 인자가]
로 끝나야 함.
내장 명령어와 외부 이진 파일의 차이
-
test
와[
는 쉘 스크립트에서 자주 사용되기 때문에 대부분의 쉘에서 내장 명령어로 구현됨. - 내장 명령어와 외부 이진 파일을 사용할 때 다른 동작을 보일 수 있으며, 쉘에 따라서도 차이가 발생할 수 있음.
[[
의 사용과 차이점
-
[[
는 Bash 확장으로[
의 사용을 대체함. -
[[
는 내장 명령어로서 표현식 내에서 언어의 기본 규칙을 변경할 수 있음. -
[[
는 문자열 비교 시 글로브 패턴을 리터럴로 취급하여 다른 결과를 낼 수 있음.
쉘 스크립트 작성 시 선택
- 이식성 있는 쉘 스크립트를 작성할 때는
[
를 사용하는 것이 좋음. - Bash 전용 스크립트를 작성한다면
[[
를 사용하는 것이 더 많은 기능을 제공함.
쉘 표현식과 test
표현식의 결합
- 쉘은
!
,&&
,||
연산자를 통해 자체 표현식을 가짐. -
test
표현식과 쉘 표현식을 하나의 명령어로 결합할 수 있음.
GN⁺의 의견
이 글에서 가장 중요한 점은 유닉스 시스템에서 [
와 test
가 같은 기능을 수행하는 두 가지 다른 명령어로 존재한다는 것이며, 이는 쉘 스크립트의 가독성과 효율성을 높이기 위한 것으로 추측된다. 이러한 정보는 초급 소프트웨어 엔지니어들이 쉘 스크립트를 작성하거나 이해할 때 유용하게 활용될 수 있으며, 쉘 스크립트의 작동 원리와 다양한 쉘 간의 차이점을 이해하는 데 도움이 될 것이다. 이 글이 흥미로운 이유는 쉘 스크립트의 기본적인 도구들이 어떻게 다양한 형태로 사용될 수 있는지를 보여주며, 쉘 프로그래밍의 복잡성과 유연성을 잘 드러내기 때문이다.
Hacker News 의견
-
원 저자의 감사 인사 및 제목 수정 제안
원 저자가 글이 인기를 얻어서 감사하다는 인사를 전하며, 제목에 연도를 추가하고 "test" 단어의 대문자 사용을 지양할 것을 제안함. "test"가 실제 명령어를 의미하기 때문임.
-
Bourne 쉘의 "test" 명령어 역사와 개인적 선호
Bourne 쉘이 IDE가 없던 시절에 만들어져 괄호나 대괄호 없이 "test" 명령어가 사용됐음을 설명. 개인적으로는 대괄호 형식보다 "test" 형식을 선호한다고 함.
-
if
블록을 사용하지 않는 조건문의 예시if
블록 없이 조건문을 간단하게 작성하는 방법을 소개하며, 디버그 출력을 조건부로 stderr에 출력하는 예시를 제시함. -
if
블록과 일반 명령어의 결합 사용법if
블록이 일반 명령어를 테스트할 수 있음을 보여주며, 예를 들어grep
명령어를 사용한 로그 검색의 예시를 듦. -
test
명령어의 논리 연산 사용에 대한 고민test
명령어 내에서 논리 연산을 사용할지 별도의 조건문을 사용할지에 대한 고민을 표현함. 성능 문제가 없다면 양쪽 모두에 대해 타당한 이유가 있다고 함. -
"test" 명령어 사용의 이점과 "man test"의 편리함
몇 년 전부터 대괄호를 사용하지 않고 "test" 명령어를 사용하는 것이 좋다고 주장함. 이는 "test"가 단순한 명령어임을 강조하고, "man test"를 사용하는 것이 "man bash"를 찾는 것보다 편리함을 설명함.
-
[
와test
의 단일 인자 동작에 대한 주의변수가 비어 있지 않은지 확인할 때 변수를 따옴표로 감싸지 않으면 예상치 못한 결과를 초래할 수 있음을 경고함. 변수를 따옴표로 감싸야 한다고 강조함.
-
리눅스와 NetBSD에서
/bin/[
와/bin/test
의 차이점리눅스에서는
/bin/[
와/bin/test
가 다르지만 NetBSD에서는 같다는 사실을 공유함. -
test
/[
/[[
에 대한 더 깊은 탐구와 쉘의 이상한 점들에 대한 블로그 링크 공유test
,[
,[[
에 대한 더 깊은 이해를 돕는 문서와 쉘의 다양한 특징을 설명하는 블로그 링크를 공유함. -
[[
가 bash 전용임을 지적하고, bash 사용이 확실하다면[[
를 사용할 것을 권장[[
가 bash 전용 명령어임을 언급하며, bash를 사용할 때는[[
를 사용하는 것이 좋다고 조언함. -
[
가 bash 스크립팅 언어의 일부가 아니라는 인식에 대한 혼란[
가 bash 스크립팅 언어의 일부가 아니라 단순한 프로그램임을 이해하는 데 혼란이 있었음을 표현하고, 이에 대한 설명을 요청함. -
쉘에 대한 강한 의견과
[
사용에 대한 반대[
를 사용하지 말고 "test"만 사용해야 한다는 강한 의견을 표현함.[
가 언어의 문법처럼 보이지만 실제로는 프로그램이라는 점을 강조하며, 문자열 평가에는case
문을 사용해야 한다고 주장함.