모든 CLI 명령 옵션은 의미적 약어입니까?

모든 CLI 명령 옵션은 의미적 약어입니까?

핵심은 의미론입니다.

curl -I, 즉 curl --head, 나를 혼란스럽게 합니다.I알파벳이 어떤 의미를 나타내는지 궁금합니다. 의미론적 단어의 약어가 아닌 단지 참조에 불과합니까?다시 말하지만 curl -b이는 curl --cookie동일한 혼란스러운 문제가 있음을 의미합니다.

발명가가 처음에 어떻게 그런 디자인을 생각해 냈는지 말해 줄 수 있는 사람이 있나요? 위의 예는 옵션이 의미론적일 필요가 없다는 것을 의미합니까?

답변1

언뜻 보면 이 질문에는 '아니요, 옵션'이라고 대답하는 것 외에는 대답할 수 없는 것 같습니다.~인 것 같다항상 말도 안되는 일이 발견됩니다. 전혀 의미가 없는 명명 옵션을 의도적으로 사용하는 자신만의 프로그램을 만들 수 있습니다. (물론, 그럼에도 불구하고 의도적으로 무의미하게 선택되었다면 무의미함에 의미가 있다고 말할 수도 있습니다.)

그러나 좀 더 생각해 본 결과, 나는 깨달았다.옵션 의미론의 모호함은 실제로 명령줄 옵션 이름을 지정하는 방법에 있어 중요하고 유용한 부분입니다., curl -I특히 예시적인 예입니다.

무루가 말한 대로, 옵션 없음가지다의미론적.하지만 curl선택 -I의미론.~에서컬(1):

-i/--include
        (HTTP) 출력에 HTTP 헤더를 포함합니다. HTTP 헤더에는 서버 이름, 문서 날짜, HTTP 버전 등이 포함됩니다.

-I/--head
       (HTTP/FTP/FILE) HTTP 헤더만 가져옵니다! HTTP 서버에는 문서 제목만 가져오는 HEAD 명령이 있습니다. FTP 또는 FILE 파일과 함께 사용하면 컬은 파일 크기와 마지막 수정 시간만 표시합니다.

-i--includeHTTP 헤더를 포함시키는 축약형입니다 . -I축약형이지만 의미 --head상으로는더 강하게form -i, -iHTTP 헤더를 제공 -I하면서오직HTTP 헤더.

이는 더 큰 질문에 대한 통찰력을 제공합니다. 옵션 이름이 의미적인지 여부를 판단하는 데는 다양한 기준이 있습니다. 옵션일 때의미상으로는 의도적일 수도 있고 의도하지 않았을 수도 있습니다. 여부만 신경쓰신다면일부이 옵션을 의미론적으로 기억하세요. 그러면 언제든지 그 의미와 관련된 이름의 이유를 만들 수 있습니다.

일부 옵션에는 둘 이상의 의미가 있습니다. GNU를 만들 수 있습니다grep-Afor와 일치하는 행에 인접한 행을 표시합니다 .뒤쪽에, -B을 위한앞으로, -C그리고문맥그것은 당신에게 두 가지를 제공합니다. 따라서 -A/ --after-context, -B/ --before-context, / -C세 가지 옵션의 약어형은 --context의미가 매우 가깝고 알파벳에서도 서로 가깝습니다. 이것이 의미론인가요?

이를 더 추구하고 엄격한 답변을 얻으려면 해당 표준을 검색할 수 있습니다.POSIX.1-2008. 의미 없는 명명된 옵션을 비활성화합니다. 이는 매우 믿을 수 없을 것 같지만 확실하게 하려면 전체 내용을 주의 깊게 읽어야 할 것 같습니다. 피상적인 검색에서는 옵션이 의미를 갖기 위한 요구 사항이 나타나지 않았습니다. 특히,이 공식 지침--문서에 준수한다고 명시되어 있는 명령에만 필요함--옵션 이름 지정 방법과 옵션 전달의 효과에 대한 다양한 제한을 제안하지만 옵션 이름에 대한 요구 사항이나 권장 사항으로 해석될 수 있는 내용은 언급하지 않습니다. 느끼다. 무언가를 발견하더라도 많은 Unix 계열 시스템은 POSIX와 완전히 호환되는 것을 목표로 하지 않습니다.

그러나 각 옵션의 이름이 적합한지 여부를 결정하기 위해 공식 소스를 참조하는 것(공급업체는 가장해야 함) 전체 아이디어는 약간 어리석습니다.옵션에 대해 알아두면 정말 유용한 점은 이름이 서로 연관될 수 있는 다양한 방법입니다.단어, 다른 옵션의 이름을 따서 이름을 지정하거나 다른 옵션에 알파벳순으로 인접하여 이름을 지정할 수 있습니다. 때로는 사용 가능한 문자(또는 숫자)일 때도 있습니다. 이러한 방법에 대해 생각하면 옵션을 기억하고, 매뉴얼 페이지를 검색할 때 해당 옵션을 찾고, 스크립트나 프로그램이 사용해야 하는 옵션 이름에 대해 올바른 결정을 내리는 데 도움이 될 수 있습니다.

마지막으로, 이는 단지약어옵션의 이름은 의미를 추론할 수 없는 방식으로 지정됩니다. 예를 들어, 긴 형식 옵션 --regex--regexpmlocate모두 정규식과 관련되어 있으므로 의미상 이름이 지정되었습니다. 하지만 이름이 붙여진 방식으로는 그것이 무엇을 --regexp의미하는지 알 수 없습니다.다음매개변수는갈아 바수다그리고 --regex의미모두모드 매개변수는 다음과 같습니다.오히려에스.

관련 정보