@Caleb은 스크립트를 심볼릭 링크로 테스트하는 것에 대해 정확합니다. 그러나 왜 빠졌는지에 대한 부분은 궁금했습니다. coreutils 소스 코드를보고 테스트 결과를 추적하면 심볼릭 링크 테스트를 실행할 때 lstat를 사용하고 -f 테스트를 사용하는 경우 실제로 symlink 다음에 'stat'를 호출한다는 것을 알 수 있습니다.
$ ln -s varnish_config XXX
$ strace -s 2000 test -L XXX 2>&1 | grep XXX
execve("/usr/bin/test", ["test", "-L", "XXX"], [/* 47 vars */]) = 0
lstat("XXX", {st_mode=S_IFLNK|0777, st_size=14, ...}) = 0
$ strace -s 2000 test -L varnish_config 2>&1 | grep varnish
execve("/usr/bin/test", ["test", "-L", "varnish_config"], [/* 47 vars */]) = 0
lstat("varnish_config", {st_mode=S_IFREG|0664, st_size=1046, ...}) = 0
$ strace -s 2000 test -f XXX 2>&1 | grep XXX
execve("/usr/bin/test", ["test", "-f", "XXX"], [/* 47 vars */]) = 0
stat("XXX", {st_mode=S_IFREG|0664, st_size=1046, ...}) = 0
통계 매뉴얼 페이지에서 :
stat() stats the file pointed to by path and fills in buf.
lstat() is identical to stat(), except that if path is a symbolic link,
then the link itself is stat-ed, not the file that it refers to.
이는 지정된 파일 이름이 일반 파일 또는 일반 파일 자체에 대한 심볼릭 링크 인 경우 -f 테스트가 true를 반환 함을 의미합니다.
-e와-f즉 하였다-e(모든 종류의) 파일이 존재하는 경우에 알을 사용하고,-f파일이 존재하고 정규 파일 인 경우 시험 구체적이었다. "정규 파일"이 무엇인지 오해 한 것 같습니다.