sort -k5nr이 구문 오류가 아닌 이유는 무엇입니까? n? 왜 구문 오류가 아닌가? 편집하다: $ ls -l

$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr

이 두 명령이 동일한 출력을 생성한다는 것을 알았습니다.
나는 결합 할 수 있습니다하지만 왜 이해가 안 5n?
왜 구문 오류가 아닌가?

편집하다:

$ ls -l | cut -d: -n -f 2
$ ls -l | cut -d:nf2
cut: the delimiter must be a single character
Try `cut --help' for more information.

cut복용량처럼 행동하지 sort않습니까?



답변

sort당신이 기대하는 방식으로 구문 분석하는 방식으로 구현 되기 때문 입니다.

여기를 참조 하십시오 :

  • 때로는 옵션과 인수가 함께 실행되고 때로는 공백으로 구분되고 때로는 문자로 구분됩니다. 일반적으로 : 또는 =. 따라서 “Prog -fFilename”, “Prog -f Filename”, “Prog -f : Filename”, “Prog -f = Filename”입니다.
  • 일부 프로그램에서는 단일 문자 옵션을 결합 할 수 있습니다. 다른 사람들은 그렇지 않습니다. 스위치 “-fA”는 “-f -A”와 동일하거나 잘못되었거나, 유효하지만 다른 매개 변수 일 수도 있습니다.

이것은 공백없이 작동하며 단일 문자 옵션의 조합으로 보입니다.


그것들은 단순히 인수 파싱이 다르게 구현되는 다른 프로그램입니다.

에서 coreutils8.13, 다음 비교 ::

  • src/sort.c4315 행, 특수 정수 구문 분석 함수를 호출하여 parse_field_count첫 번째 유효하지 않은 문자로 리턴합니다 (예 : 숫자 값이 완료되고 다음 옵션이 시작되면) : sort인수를 처리 할 수있는 이유 입니다.
  • src/cut.c, 803 행, 단순히 getopt다음 공백까지 모든 것을 현재 옵션의 매개 변수로 해석 하는 규칙적인 동작을 사용합니다 .