셸의 콜론은 아무것도 하지 않는다. 그래도 사용하라

1 hour ago 1

셸의 :는 아무 동작 없이 인수만 평가해 버리는 널 명령(null command) 으로, 매개변수 확장과 결합하면 필수 인수 검사와 기본값 설정을 간결하게 처리할 수 있음 : "${1:?missing argument, aborting!}"는 $1이 없거나 비어 있으면 진단 메시지를 stderr에 출력하고 0이 아닌 상태로 종료함 ${VAR:=default}를 :의 인수로 전달하면 확장은 실행하되 결과 문자열은 버리므로, 확장 결과를 명령으로 실행하지 않고 기본값만 설정할 수 있음 리디렉션을 통한 파일 비우기와 접근 가능 여부 검사, trap의 빈 명령, set -u 환경의 변수 검사, 비어 있는 조건 분기에도 :를 활용할 수 있음 : "${VAR:=default}"는 변수명을 한 번만 써서 오타 가능성을 줄이고, while:에서는 항상 성공하는 조건이 되어 무한 루프를 표현함 널 명령과 매개변수 확장 :는 인수를 평가한 뒤 결과를 버리는 널 명령 내장 명령임 1971년 Thompson shell까지 거슬러 올라가며, 당시에는 레이블이자 Unix 최초의 주석 표식으로도 쓰였음 네 줄짜리 조건문 대신 다음 한 줄로 필수 인수를 검사할 수 있음 : "${1:?missing argument, aborting!}" echo "Hello $1!" 매개변수 확장 구문 ${name:?diagnostic}는 $name이 설정되지 않았거나 비어 있는지 검사함 값이 없으면 diagnostic을 stderr에 출력하고 셸을 0이 아닌 상태로 종료함 값이 있으면 $name과 같은 결과를 냄 널 명령 없이 ${HELLO:=123}만 실행하면 확장 결과인 123을 명령으로 취급해 command not found가 발생함 : ${HELLO:=123}는 확장을 평가해 HELLO=123을 설정하면서 그 결과는 버림 : "${DATA_DIR:=/var/data}"는 DATA_DIR="${DATA_DIR:-/var/data}"와 달리 변수명을 한 번만 적으므로 DATA_DRI 같은 오타 가능성을 줄일 수 있음 :를 활용하는 방법 기본값 설정 확장 결과를 실행하지 않고 버리면서 변수의 기본값을 설정함 : "${DATA_DIR:=/var/data}" : "${RETRIES:=3}" 파일 비우기와 접근 검사 리디렉션과 결합하면 하나 이상의 파일을 비울 수 있음 : > error.log : > error.log > access.log 서...

Read Entire Article