답변:
짧은 답변 :
플래그의 다중 사용을 무시하도록 프로그래밍되어 있기 때문입니다.
긴 대답 :
당신은에서 볼 수 있듯이 소스 코드 의 ls함수가있는 부분이 getopt_long()거대한 스위치의 경우 :
1648 int c = getopt_long (argc, argv,
1649 "abcdfghiklmnopqrstuvw:xABCDFGHI:LNQRST:UXZ1",
1650 long_options, &oi);
....
1654 switch (c)
1655 {
....
1707 case 'l':
1708 format = long_format;
1709 break;
....
1964 }
이 함수 getopt_long()는 프로그램에 지정된 모든 매개 변수를 읽습니다. -l변수 format가 설정된 경우 따라서 -lllllllll여러 번 입력하면 해당 변수가 여러 번 설정되지만 아무것도 변경되지 않습니다.
글쎄, 그것은 한 가지를 바꾼다. 이 거대한 스위치 케이스 문은 여러 -l플래그로 인해 여러 번 실행되어야합니다 . ls여러 -l플래그 로 완료하려면 더 오래 걸립니다 . 그러나 이번에는 언급 할 가치가 없습니다. =)
그것이 옳은 일이기 때문입니다. 다음과 같은 스크립트를 작성했다고 가정 해보십시오.
ls $LS_OPTIONS -l "$dir"
곳이있을 가능성이 $LS_OPTIONS이미 포함되어 있습니다 -l. 이 명령이 오류를 생성하는 것은 직관적이지 않고 성가 시며 스크립트를 피하기 위해 추가 논리가 필요합니다.
-l가장 좋은 예는 아니지만 개념이 일반적으로 어떻게 적용되는지 알 수 있기를 바랍니다. 더 좋은 예는 컴파일러 $CFLAGS의 특정 호출에서 명시 적 옵션을 복제 할 수 있는 컴파일러 옵션입니다 .
ls옵션 세트로 호출하는 별명을 정의한 경우에도 동일한 상황이 발생할 수 있습니다.
-l당신의 ls별명 것은 좋은 생각 같아, 같은 문제는 상호 작용에 좋은 수있는 옵션 발생할 가능성이 ls같은 별칭 -p또는 --color=auto.
ls. ll에 대한 별칭 일 수 있으며 해당 별칭이 ls -l있는 시스템에서는을 입력 할 수 있습니다 ll -lart.
쉘 별명은 같은 명령 ls으로 반복 옵션을 허용하지 않으면 상당히 성 가실 것 입니다.
당신이 가지고 있다고 가정
alias ls='ls --color=auto'
alias rm='rm -i'
충돌하는 플래그가 허용되지 않으면 ls --color=neveror ls --color=auto또는 같은 명령을 실행하면 오류가 발생합니다 rm -i.
따라서 이러한 명령은 이후 플래그가 이전 플래그보다 우선하도록 설계되었습니다.
--inplace하고 --delay-updates, 예를 들면.) 일부 도구는 바로 지난 온다 무엇이든 걸릴; rm -if아마도 좋은 예일 것입니다. 그러나이 LS의 -l 옵션의 충돌은 따라서,하지 ls -l와 ls -ll문제가되지 않습니다, 그것은 의미있는 방식으로 실행에 영향을주지 않습니다. 컴퓨터는 마음을 사로 잡는 반복에 능숙합니다.