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"