Linux와 커맨드 라인 기초
$ ls
a.log b.log notes.txt
$ for f in *.log; do mv "$f" "${f%.log}.txt"; done위의 조작 후에 디렉터리에 있는 파일로 올바른 것은?
- Aa.log.txt, b.log.txt, notes.txt
- Ba.log, b.log, notes.txt 그대로이며, a.log와 b.log 안의 '.log'라는 문자열이 '.txt'로 치환된다
- Ca.txt, b.txt, notes.txt
정답과 해설 보기
정답: C. a.txt, b.txt, notes.txt
for f in *.log는 *.log에 일치하는 a.log와 b.log를 하나씩 변수 f에 넣고 do와 done 사이를 반복합니다. ${f%.log}는 f의 값 끝에서 .log를 제거한 문자열이므로 a.log라면 a가 되며, mv "$f" "${f%.log}.txt"는 a.log의 이름을 a.txt로 바꿉니다. notes.txt는 *.log에 일치하지 않으므로 그대로 남습니다. "$f"를 큰따옴표로 감싸는 것은 이름에 공백이 포함되어 있어도 하나의 인수로 mv에 넘기기 위해서입니다.