Bash는 다소 비표준적인 방식으로 작동합니다 -
.
POSIX의 말 :
지침 10 : 옵션 인수가 아닌
첫 번째 --
인수는 옵션의 끝을 나타내는 구분 기호로 받아 들여야합니다. 다음 인수는 -
문자로 시작하더라도 피연산자로 취급되어야합니다 .
[…]
지침 13 :
피연산자를 사용하여 읽기 또는 쓰기를 위해 열 파일을 나타내는 유틸리티의 경우, -
피연산자는 표준 입력 (또는 출력 파일이 지정되었다는 것이 명확 할 때 표준 출력) 또는 파일 이름이 -
.
과
-
표준 입력 또는 출력을 의미 하는 피연산자 를 승인하거나 수용하지 않기 위해이 지침에 따라 POSIX.1-2017의 Shell and Utilities 볼륨에 설명 된 유틸리티가 필요한 경우 ,이 사용법은 OPERANDS 섹션에 설명되어 있습니다. 그렇지 않으면, 그러한 유틸리티가 피연산자를 사용하여 파일을 나타내는 경우, 피연산자 -
가 표준 입력 (또는 표준 출력) 또는 파일 이름 을 나타내는 지 여부에 따라 구현 정의됩니다 -
.
그러나 다음 man 1 bash
과 같이 읽습니다.
A --
는 옵션의 끝을 알리고 추가 옵션 처리를 비활성화합니다. 뒤에 나오는 모든 인수 --
는 파일 이름 및 인수로 처리됩니다. 인수는 -
에 해당합니다 --
.
따라서 Bash -
는 표준 입력이나 파일을 의미하지 않으므로 다소 비표준입니다.
이제 당신의 특별한 경우 :
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
나는 의심 실현하지 않을 수 있습니다이 명령의 저자 -
에 해당 --
이 경우이다. 필자 는 저자가 표준 입력을 읽었 으면 좋겠다고 생각 하고 지침 13에 따라 작동 bash
할 것으로 예상 -
했다.
그러나 지침에 따라 작동하더라도 표준 입력이 파이프 인 시점을 감지하고 그에 따라 행동 -
하기 때문에 (여기서 제공 bash
되지 않는 한 -c
) 여기에서 불필요합니다 .
그러나 -
지침에 따라 작동하지는 않습니다 --
. --
그 뒤에 인수가 없기 때문에 여전히 여기에서 불필요합니다.
내 생각에 마지막 -
은 아무것도 변하지 않습니다. 명령이 없으면 명령이 작동합니다.
일반적인 방법 --
과 -
유용한 방법을 보려면 아래 예 를 살펴보십시오 .
cat
내 쿠분투에서 두 지침을 모두 준수하며이 지침을 사용하여 -
및의 유용성을 보여줄 것입니다 --
.
파일 이름 foo
이 존재하게하십시오. 파일을 인쇄합니다 :
cat foo
파일 이름 --help
이 존재하게하십시오. 파일을 인쇄하지 않습니다.
cat --help
그러나 이것은 다음과 같은 파일을 인쇄합니다 --help
.
cat -- --help
--help
표준 입력에서 온 것이 무엇이든 명명 된 파일을 연결합니다 .
cat -- --help -
--
항상 ./--help
파일로 해석 될 수 있으므로 항상 전달할 수 있기 때문에 실제로 필요하지 않은 것 같습니다 . 그러나 고려
cat "$file"
변수의 내용이 무엇인지 미리 알 수 없을 때. ./
절대 경로 일 수도 있고 ./
깨질 수도 있기 때문에 앞에 덧붙일 수는 없습니다 . 반면에 이름이 지정된 파일 일 수 있습니다 --help
(왜 그렇지 않습니까?). 이 경우 --
매우 유용합니다. 이것은 훨씬 더 강력한 명령입니다.
cat -- "$file"