{1,2,3}과 {1..3}의 차이점


17

시퀀스 {1,2,3}와 차이가 {1..3}있습니까?

예를 들어 파일이 있으면

file.1
file.2
file.3

내가하려는 cat함께 그것을 사용하는 것이 안전합니다 cat file.{1..3} > file?

내가 아는 것은 cat file.*>file쉘이 때때로 임의의 방식으로 파일을 확장 할 수 있기 때문에 문제를 일으킬 수 있다는 것입니다 (이것은 inode에 달려 있다고 생각합니까?)


1
사용cat file.[123] >file
mikeserv

3
확장 순서 file.*는 inode에 의존하지 않습니다. 위치 설정에 따라 항상 사전 식으로 정렬합니다.
Barmar

1
"아이 노드에 의존한다"는 더 잘 조사 된 범죄-마음-제시 "컴퓨터"장면 중 하나의 단계처럼 들린다.
Alec Teal

1
@ mikeserv, 나는 그것을 가지고 있다고 생각합니다. 그것은 쉘 글로브이므로 실제로 존재하는 파일로만 확장됩니다. 대 file.{1..3}존재 여부에 관계없이 세 가지 모두로 확장됩니다.
와일드 카드

1
@Wildcard-적어도 하나 이상 존재하는 한. 그렇지 않으면 전혀 확장되지 않으며 cat오류가 file.[123] not found있거나 매우 유용한 것입니다.
mikeserv

답변:


18

{1..3}그리고 {1,2,3}하지만 다른 방법과 동일한 결과를 생성합니다.

일반적으로, {n1..n2}(이는 처음부터 온 zsh, bash그리고 ksh나중에 복사) 여기서 n1n2정수 사이의 모든 숫자를 생산하는 n1n2. 반면 {x,y,z}생산 세 개의 문자 x, y그리고 z.

귀하의 경우 안전하게 사용하실 수 있습니다 cat file.{1..3} > file

이제의 경우 셸 globbingcat file.*>file 을 사용하여 모든 파일 이름으로 시작 하고 결과는 현재 로케일의 데이터 정렬 순서를 기준으로 정렬됩니다.file.

여전히 안전하지만 파일이 10 개를 초과하면 더 이상 안전하지 않습니다. {1..10}당신에게 줄 것이다 1 2 3 4 5 6 7 8 9 10. 장갑을 낀 상태에서1 10 2 3 4 5 6 7 8 9


8

차이점은 하나는 목록이고 다른 하나는 시퀀스입니다. {1,2,3}세 가지 특정 요소 12, 및로 확장됩니다 3. {1..3}1과 3 사이의 숫자 목록으로 확장됩니다. 이 특정 경우에는 동일하며 둘 중 하나를 사용할 수 있습니다. file.*이름이로 시작하는 현재 디렉토리의 모든 파일 및 디렉토리로 확장됩니다 file.. 만있는 경우 file.1, file.2그리고 file.3너무 다른 두 가지에 해당하는 것이 다음.

그 문제를 일으키는 원인에 대해서는 이유가 없습니다. 당신은 생각할 수 있습니다

$ cat file.* > file.txt
cat: file.txt: input file is output file

그러나 그것은 완전히 다른 문제입니다. 내가 생각할 수있는 유일한 다른 문제는 쉘이 파일을 올바른 순서로 나열하지 않을 수 있다는 것입니다. 예를 들면 다음과 같습니다.

$ touch file1 file11 file2
$ echo file*
file1 file11 file2

이를 해결하기 위해 zsh대신 사용할 수 있습니다 bash(자세한 내용은 여기 참조).

% echo f*(n)
file1 file2 file11

일반적으로 세 가지 접근 방식은 동일하지 않습니다. 그것은 당신이하고 싶은 것에 달려 있습니다. 세 개가 동일한 출력을 반환하는 경우에는 예를 사용할 수 있습니다. 차이가 없습니다. 이러한 확장은 모두 쉘에 의해 수행되며 사용되는 명령에 전달 되기 전에 발생 합니다.


*올바른 순서에 의존하면 10 개 이상의 파일이 있으면 문제가되지 않습니까?
syss

1
@syss 번호 ARG_MAX파일 보다 많지만 10 개가 넘으면 문제가됩니다.
terdon

1
@terdon 인수 배열을 오버플로하지 않더라도 숫자 순서대로 표시되는지 (예 : "1, 10, 2"아님) 묻습니다.
Random832

3
@terdon @syss가 출력이 cat *잘 정의되어 있지 않다고 생각 합니다. 출력은 쉘과 환경에 따라 다릅니다. Sebastian의 의견을 참조하십시오 .
Marco

추가로 .txt문제가 해결 되지 file.*않습니까?
Ismael Miguel

6

그것들은 동일하지만 사용 가능한 경우 설치 한 bash 버전에 따라 다릅니다.

에서 페이지 :

{xxx,yyy,zzz,...} probably in all bash versions

{a..z} introduced in bash 3

{<START>..<END>..<INCR>} new in bash 4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.