여기서 "x$START_DAEMON" = "xyes"를 사용하는 이유는 무엇입니까? (선행 x)

여기서 "x$START_DAEMON" = "xyes"를 사용하는 이유는 무엇입니까? (선행 x)

이것은 fetchmail 데몬 스크립트의 일부입니다.

if [ ! "x$START_DAEMON" = "xyes" -a ! "$1" = "status" ]; then

그것을 사용하는 이유는 무엇입니까 x$START_DAEMON = "xyes"? 그냥 사용하지 않는 이유는 무엇입니까 $START_DAEMON = "yes"?

답변1

x$variable그런 경우를 본 적이 있어요아니요이 경우 참조는 $START_DAEMON변수(이 경우)가 비어 있을 수 있는 경우를 처리하는 것입니다. 그렇지 않으면 테스트에서 가 있는지 확인 ! = "yes"하고 오류가 발생합니다. 그러나 귀하의 의견에서 지적했듯이 큰따옴표가 x$variable이 문제를 해결합니다.

반면에 질문은서버 장애이 페이지로 이동합니다:http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html, 그 중 하나는 잠재적으로 혼란스럽거나 혼란스러운 변수 확장을 방지하는 것입니다 [.test

그럼에도 불구하고 나는 이것이 오래된 (오픈 그룹 페이지에 명시된 것처럼 "역사적") 쉘의 문제일 수 있다고 생각하며, x최신 구현은 적어도 큰따옴표가 관련된 한 쉘 없이도 올바른 작업을 수행합니다. 따라서 이것은 아마도 대부분 코딩 전통일 것입니다. /bin/sh그러나 SunOS 5.10에서 사용할 때 문제가 있음을 확인했습니다.

 # a="!"; [ "$a" = "yes" ] && echo ok
 test: argument expected

관련 정보