답변:
보다 정확하게 말하면 --bash 내장 명령 및 기타 여러 명령에서 이중 대시 ( )가 사용되어 명령 옵션의 끝을 나타내며 그 후에 위치 매개 변수 만 허용됩니다.
사용 예 : 문자열에 파일을 grep한다고 가정하십시오 -v-일반적으로 -v일치하는 의미를 바꾸는 옵션으로 간주되지만 (일치하지 않는 행만 표시) 다음과 같이 --문자열을 grep 할 수 있습니다 -v.
grep -- -v file
--에서 정규식과 옵션을 구분하는 작업을 수행 grep하지만 표준 방법은 -e/ 를 사용하는 것 --regexp입니다.
--위의 예를 다음과 같이 작성할 수 있음을 알 수는 있지만 정확합니다 grep -e -v file(매우 혼란 스럽지만).
bash내장 명령 --이 옵션 마커의 끝으로 허용 되는 것은 아닙니다 . [그리고 예를 echo들어서는 안됩니다 ( 이유 중 하나를 echo안정적으로 사용할 수 없습니다 ).
에서 man bash우리가 읽을 수있는 쉘 내장 명령 섹션 :
특별히 언급하지 않는 한, 각각의 내부 명령이 선행 옵션을 수락 등이 섹션의 설명은
-수락--옵션의 끝을 나타 내기 위해 .
:,true,false, 및test내장 매크로 옵션을 허용하지 않으며 치료하지 않는--특별.exit,logout,break,continue,let, 및shift내장 매크로 수락 및 프로세스 인수로 시작-하지 않고--. 인수를 허용하지만 옵션을 수락하도록 지정되지 않은 다른 내장은-유효하지 않은 옵션으로 시작하는 인수를 해석하며이 해석--을 방지 해야 합니다.옵션의 끝을 의미 하는
echo것은 아닙니다--.
man bash(다음에 직접 참고 :) .
POSIX.1-2017
12.2 유틸리티 구문 지침
지침 10 :
--옵션 인수가 아닌 첫 번째 인수는 옵션의 끝을 나타내는 구분 기호로 허용되어야합니다. 다음 인수는 '-'문자로 시작하더라도 피연산자로 취급되어야합니다 .
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
set내장에서 절대적으로 필요한 곳입니다.