![{1,2,3}과 {1..3}의 차이점](https://linux55.com/image/77636/%7B1%2C2%2C3%7D%EA%B3%BC%20%7B1..3%7D%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90.png)
{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 n1
및 n2
is 정수는 n1
과 사이의 모든 숫자를 생성합니다 n2
. 동시에 {x,y,z}
3개의 문자를 생성 하고 x
, .y
z
귀하의 경우에는 안전하게 사용할 수 있습니다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 사이의 숫자 목록으로 확장됩니다. 이 특별한 경우에는 동일하며 둘 중 하나를 사용할 수 있습니다. 현재 디렉토리의 이름을 로 확장합니다 . 이면 다른 두 개와 도 동일합니다.2
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
일반적으로 이 세 가지 방법은 동일하지 않습니다. 그것은 당신이하고 싶은 일에 달려 있습니다. 세 가지 모두 동일한 출력을 반환하는 경우에는 둘 중 하나를 사용할 수 있습니다. 차이 없음. 이 모든 확장은 쉘에 의해 수행되고 발생합니다.앞으로이를 사용하는 모든 명령에 전달됩니다.
답변3
동일하지만 설치한 bash 버전에 따라 다릅니다.
~에서이것페이지:
{xxx,yyy,zzz,...} probably in all bash versions {a..z} introduced in bash 3 {<START>..<END>..<INCR>} new in bash 4