$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr
이 두 명령이 동일한 출력을 생성한다는 것을 알았습니다.
나는 결합 할 수 있습니다하지만 왜 이해가 안 5
와 n
?
왜 구문 오류가 아닌가?
편집하다:
$ 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”와 동일하거나 잘못되었거나, 유효하지만 다른 매개 변수 일 수도 있습니다.
이것은 공백없이 작동하며 단일 문자 옵션의 조합으로 보입니다.
그것들은 단순히 인수 파싱이 다르게 구현되는 다른 프로그램입니다.
에서 coreutils
8.13, 다음 비교 ::
src/sort.c
4315 행, 특수 정수 구문 분석 함수를 호출하여parse_field_count
첫 번째 유효하지 않은 문자로 리턴합니다 (예 : 숫자 값이 완료되고 다음 옵션이 시작되면) :sort
인수를 처리 할 수있는 이유 입니다.src/cut.c
, 803 행, 단순히getopt
다음 공백까지 모든 것을 현재 옵션의 매개 변수로 해석 하는 규칙적인 동작을 사용합니다 .