항상 지령에 붙어있는 - (Double Dash)는 뭐예요?

2964 단어 BashshellZshtech
안녕하세요.주식회사 프라하 CEO 겸 엔지니어 송원입니다.
예를 들면 Node입니다.js에 테스트를 쓸 때 이런 지령을 본 적이 있습니까?dotenv -e .test.env -- jest --config config.json.test.엔v 다음에 섞기--.이게 도대체 뭐야?

결론


- 는 이후의 입력이 옵션이 아니라는 것을 지정하는 기호입니다.
bash 문서에서 그 존재를 언급했다.
https://www.gnu.org/software/bash/manual/bash.html
Unless otherwise noted, each builtin command documented as accepting options preceded by ‘-’ accepts ‘--’ to signify the end of the options. The :, true, false, and test/[ builtins do not accept options and do not treat ‘--’ specially. The exit, logout, return, break, continue, let, and shift builtins accept and process arguments beginning with ‘-’ without requiring ‘--’. Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with ‘-’ as invalid options and require ‘--’ to prevent this interpretation.
(조대략의 번역)
기본적으로 "-"로 시작하는 매개 변수는 선택적으로 수락할 수 있는 명령으로 "-"을 전달하여 옵션의 끝을 나타낸다.
매개변수는 수락하지만 옵션은 수락하지 않는 명령도 있습니다.이러한 명령은 "-"로 시작하는 매개변수를 잘못된 옵션으로 인식하므로 "-"로 시작하는 매개변수를 제공하려면 "-"를 사용해야 합니다.
man bash를 진행하더라도 --에 대한 기술을 찾을 수 있습니다.
       --        A  --  signals the end of options and disables further option
                 processing.  Any arguments after the -- are treated as  file-
                 names and arguments.  An argument of - is equivalent to --.
(초대략적인 의역)--는 옵션의 끝을 나타냅니다.-- 이후의 매개 변수는 파일 이름이나 매개 변수로 식별된다.
예컨대디렉터리에 txt라는 파일이 존재하는 상태rm --hoge.txt에서 실행하면 어떤 일이 일어날까요?
> rm --hoge.txt 
rm: illegal option -- -
는 주로'rm 명령에 -hoge.txt 같은 명령이 존재하지 않습니다!'의 오류입니다.기본적으로 bash와zsh 등 내부 명령은 ---에서 시작된 매개 변수(-h 또는-help 등)를 옵션으로 식별하기 때문에 -hoge.txt도 옵션 중 하나로 식별됩니다.
참고로 집행rm *.txt할 때 rm지령도 실패할 수 있습니다
> rm *.txt
rm: illegal option -- -
이런 상황을 방지하기 위해서는 끼워서 - "앞으로 입력은 옵션이 아니에요"라고 상대방에게 알려야 한다
> rm -- --hoge.txt

주의 사항: 설명 없음 - 명령


명령은 -- 옵션 끝 기호로 해석되지 않을 수 있습니다.
echo는 하나의 예다."n"문자열을 검사하려고 합니다.
> echo -n
(何も出力されない)
상기 명령은'n'옵션을 echo에 건네주면 식별됩니다.그럼 이 글에 끼워서 배운 "-"하면 되잖아요.
출력
> echo -- -n
-- -n
-- -n.출력하고 싶은 건-n입니다.명령에 따라 "-"를 해석하지 않는 경우가 있습니다.
참고로 zsh라면 --로 대체-하면 echo'-n'이라는 문자열을 사용할 수 있습니다.
> echo - -n
-n
- 수행 시 환경과 명령에 따라 동작이 달라지므로 주의해야 합니다.

좋은 웹페이지 즐겨찾기