getopt()
함수에 대한 인수가 각 명령에 대해 어떤 모양인지 알지 못하는 경우 명령 줄에서 인수를 재정렬하는 작업을 수행하는 일반 용도의 도구를 안전하게 작성할 수 없습니다. 고려 : 첫 번째 명령에서
make something -f makefile
cp something -f makefile
을, 명령 호출을 정규화하기 위해 전면에 -f
및 makefile
모두를 이동해야합니다. 두 번째 단계에서는 -f
만 이동해야합니다. 다음 파일 이름도 이동하면 명령을 다시 쓰고 데이터를 삭제합니다.
물론 --force
또는 --file=makefile
스타일 인수도 긴 형식을 취하는 경우 getopt_long()
인수 문자열이 무엇인지 알아야합니다.
솔직히, Linux 환경에서 POSIXLY_CORRECT를 사용하는 것이 더 좋으며, 제공되는 교활한 유연성에 대해 잊어 버리고 인수 전에 항상 옵션을 작성하는 방법을 배우십시오. 그렇게하면 모든 유닉스 계열 컴퓨터에서 코드가 더 잘 작동 할 것입니다.
당신은 /bin
및 /usr/bin
(예 /usr/gnu/bin
이외의 디렉토리에 GNU 소프트웨어를 설치 한 다음 앞서 시스템 디렉토리를 PATH에 /usr/gnu/bin
를 배치하는 것이 확인 할 수있다. fink
같은 사전 구축 된 시스템이 있습니다, 너무. 그러나 GNU의 아날로그가없는 툴의 경우에는 도움이되지 않을 것이고, 작성한 쉘 스크립트는 사용자가하는 것과 같은 설정이없는 다른 Mac에서는 사용할 수 없다는 '위험'이 있습니다.
3 개 이상의 옵션 'cp -R/root/bkp'의 경우에 어떤 종류의 순서가 바뀌는가를 가정하십시오. 예 : – triclosan
이제 제가 nk에 대해, 당신은 당신의 Mac에서 coreutils macport http://www.macports.org/ports.php?by=name&substr=coreutils (그리고 아마 다른 것들)를 통해 많은 GNU 도구를 얻을 수 있다는 것을 알고 있습니까? 어쩌면 이것이 당신의 노력에서 당신을 도울 수 있습니다. – Mat
@Mat, 나는 그들을 대체하는 것이 지루하고 위험하다고 생각한다. 게다가 BSD getopt에 의존하는 다른 실행 파일에서는 작동하지 않습니다. 재주문을 수행하고 bash를 호출하는 셸을 만드는 것을 고려하고있었습니다. – luanjunyi