LabHub

셸 스크립팅 · 입력과 인자를 안전하게 다루기 · 퀴즈

퀴즈: 입력과 인자를 안전하게 다루기

LabHub 에서 이어서 보기

문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. `f="my report.txt"` 일 때 `rm $f` 가 하는 일은?

    1. `my report.txt` 파일 하나를 지운다
    2. `my` 와 `report.txt` 두 개를 지우려 시도한다
    3. 따옴표가 없어 에러가 난다
    4. 따옴표가 자동으로 붙는다
  2. 파일 목록을 파이프로 넘길 때 NUL 구분(`-print0` / `-0`)을 쓰는 이유는?

    1. 파일명에 들어갈 수 없는 문자가 NUL 뿐이라 구분자로 안전해서
    2. 줄 단위 처리보다 항상 실행 속도가 빨라서
    3. 긴 파일명을 전달할 때 메모리 사용량을 줄여서
    4. find 결과가 파일명 순서대로 정렬되도록 보장해서
  3. 스크립트가 받은 인자를 다른 명령에 그대로 넘길 때 올바른 것은?

    1. `cmd $*`
    2. `cmd "$*"`
    3. `cmd "$@"`
    4. `cmd $@`
  4. `rm -- "$f"` 에서 `--` 의 역할은?

    1. 이후 파일을 확인 없이 강제로 삭제하게 함
    2. 이후 인자를 옵션이 아닌 값으로 해석하게 함
    3. 이후 디렉터리를 재귀적으로 삭제하게 함
    4. 이후 오류 메시지와 확인을 생략하게 함
  5. `getopts ":vo:"` 에서 맨 앞의 콜론이 하는 일은?

    1. 뒤에 오는 옵션들을 모두 필수로 지정함
    2. 같은 옵션을 두 번 받을 수 있게 함
    3. 조용한 에러 모드를 켜서 `:` 와 `?` 분기로 직접 처리하게 함
    4. 값을 받는 옵션임을 표시함
  6. 사용자 입력을 `eval "grep $input file"` 로 쓰면 안 되는 이유는?

    1. eval 이 느리기 때문에
    2. 따옴표가 사라져 인자가 갈라져서
    3. grep 이 패턴을 못 읽고 실패해서
    4. 입력에 포함된 셸 메타문자가 그대로 실행되기 때문