대부분의 다른 사람들이 관찰했듯이 "-n"은 echo
명령 바로 다음에 아무 곳에 나 배치하면 문자 그대로 해석됩니다 .
역사적으로 UNIX 유틸리티는 모두 이와 같았습니다. 명령 이름 바로 뒤에있는 옵션 만 찾았습니다. POSIX가 이전 방식을 올바른 것으로 지정 했으므로 (유선하지 않을 수도 있음)보다 유연한 스타일을 개척 한 BSD 또는 GNU 일 가능성이 높습니다 (가이드 라인 9 및 man 3 getopt
Linux 시스템 참조). 어쨌든, 요즘 대부분의 리눅스 유틸리티가 새로운 스타일을 사용하지만,와 같은 일부 유인물이 echo
있습니다.
Echo
POSIX가 등장 할 때까지 근본적으로 상충되는 버전이 두 개 이상 존재했다는 점에서 표준 측면에서 엉망 입니다. 한편으로는 백 슬래시 이스케이프 문자를 해석하지만 인수를 문자 그대로 처리하고 옵션을 허용하지 않는 SYSV 스타일이 있습니다. 다른 한편으로, 당신은 BSD 스타일을 가지고 있는데, 이것은 이니셜 -n
을 특별한 경우로 취급하고 문자 그대로 다른 모든 것을 절대적으로 출력합니다. 그리고 echo
매우 편리하기 때문에 하나의 동작에 의존하는 수천 개의 쉘 스크립트가 있습니다.
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON\'T USE -n -- it\'s not finished! --
"모든 것을 문자 그대로 처리"하는 의미 때문에, 문제를 echo
일으키지 않고 새로운 옵션을 추가하는 것조차 불가능합니다 . 만약 GNU가 그것에 유연한 옵션 체계를 사용한다면, 지옥은 풀릴 것입니다.
덧붙여, Bourne 쉘 구현 사이의 최적의 호환성을 위해 사용 printf
하기보다는echo
.
echo
특히 유연한 옵션을 사용하지 않는 이유를 설명하기 위해 업데이트 되었습니다 .
echo -n "bar"
"bar"를echo "bar" -n
제공 하는 동안 "bar -n" 을 제공