クイズ: 入力と引数を安全に扱う
한국어 원문으로 표시합니다.
f="my report.txt" 일 때 rm $f 가 하는 일은?
my report.txt파일 하나를 지운다my와report.txt두 개를 지우려 시도한다- 따옴표가 없어 에러가 난다
- 따옴표가 자동으로 붙는다
파일 목록을 파이프로 넘길 때 NUL 구분(-print0 / -0)을 쓰는 이유는?
- 파일명에 들어갈 수 없는 문자가 NUL 뿐이라 구분자로 안전해서
- 줄 단위 처리보다 항상 실행 속도가 빨라서
- 긴 파일명을 전달할 때 메모리 사용량을 줄여서
- find 결과가 파일명 순서대로 정렬되도록 보장해서
스크립트가 받은 인자를 다른 명령에 그대로 넘길 때 올바른 것은?
cmd $*cmd "$*"cmd "$@"cmd $@
rm -- "$f" 에서 -- 의 역할은?
- 이후 파일을 확인 없이 강제로 삭제하게 함
- 이후 인자를 옵션이 아닌 값으로 해석하게 함
- 이후 디렉터리를 재귀적으로 삭제하게 함
- 이후 오류 메시지와 확인을 생략하게 함
getopts ":vo:" 에서 맨 앞의 콜론이 하는 일은?
- 뒤에 오는 옵션들을 모두 필수로 지정함
- 같은 옵션을 두 번 받을 수 있게 함
- 조용한 에러 모드를 켜서
:와?분기로 직접 처리하게 함 - 값을 받는 옵션임을 표시함
사용자 입력을 eval "grep $input file" 로 쓰면 안 되는 이유는?
- eval 이 느리기 때문에
- 따옴표가 사라져 인자가 갈라져서
- grep 이 패턴을 못 읽고 실패해서
- 입력에 포함된 셸 메타문자가 그대로 실행되기 때문