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

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

{1,2,3}와 의 순서에 차이가 있나요 {1..3}?

예를 들어, 어떤 파일이 있다면

file.1
file.2
file.3

cat함께 사용해도 안전 할까요 cat file.{1..3} > file?

쉘이 때때로 무작위 방식으로 파일을 확장하기 때문에 이것이 문제를 일으킬 수 있다는 것을 알고 있습니다. cat file.*>file(내 생각에는 inode에 따라 다르다고 생각합니다. 맞습니까?)

답변1

{1..3}동일한 결과를 생성 하지만 {1,2,3}다른 방식으로 생성됩니다.

일반적으로 {n1..n2}(먼저 에서 zsh, bash나중에 ksh복사) where n1n2is 정수는 n1과 사이의 모든 숫자를 생성합니다 n2. 동시에 {x,y,z}3개의 문자를 생성 하고 x, .yz

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

cat file.*>file이제 당신이 사용하는 경우쉘 와일드카드, filename 으로 시작하는 모든 파일을 생성 file.하고 결과는 현재 로케일의 데이터 정렬에 따라 정렬됩니다.

여전히 안전하지만 파일이 10개 이상이면 더 이상 안전하지 않습니다. {1..10}당신에게 주어질 것입니다 1 2 3 4 5 6 7 8 9 10. 와일드카드를 사용하면 다음과 같은 결과를 얻을 수 있습니다.1 10 2 3 4 5 6 7 8 9

답변2

차이점은 하나는 목록이고 다른 하나는 시퀀스라는 것입니다. , 의 {1,2,3}세 가지 특정 요소로 확장됩니다 1. 1과 3 사이의 숫자 목록으로 확장됩니다. 이 특별한 경우에는 동일하며 둘 중 하나를 사용할 수 있습니다. 현재 디렉토리의 이름을 로 확장합니다 . 이면 다른 두 개와 도 동일합니다.23{1..3}file.*file.file.1file.2file.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

일반적으로 이 세 가지 방법은 동일하지 않습니다. 그것은 당신이하고 싶은 일에 달려 있습니다. 세 가지 모두 동일한 출력을 반환하는 경우에는 둘 중 하나를 사용할 수 있습니다. 차이 없음. 이 모든 확장은 쉘에 의해 수행되고 발생합니다.앞으로이를 사용하는 모든 명령에 전달됩니다.

답변3

동일하지만 설치한 bash 버전에 따라 다릅니다.

~에서이것페이지:

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

{a..z} introduced in bash 3

{<START>..<END>..<INCR>} new in bash 4

관련 정보