셸 스크립팅 · 입력과 인자를 안전하게 다루기 · 퀴즈
퀴즈: 입력과 인자를 안전하게 다루기
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`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 이 패턴을 못 읽고 실패해서
- 입력에 포함된 셸 메타문자가 그대로 실행되기 때문