sort -k5nr이 구문 오류가 아닌 이유는 무엇입니까?


2
$ 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않습니까?

답변:


5

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다음 공백까지 모든 것을 현재 옵션의 매개 변수로 해석 하는 규칙적인 동작을 사용합니다 .

않는 sort일반적인 규칙에 따라? cut그런 식으로 작동하지 않습니다.
kev

@kev 내 답변에 추가 설명을 추가했습니다.
Daniel Beck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.