Bash 셸 확장
쉘이 입력을 분석할 때 하는 동작 중 하나가 셸 확장이다. Bash는 다양한 유형의 확장을 제공합니다. 이 기사에서는 중요한 확장인 "Brace 확장"을 검토해 보겠습니다.
이 기사는 진행 중인 Bash Tutorial 시리즈의 일부입니다.
가새 확장
중괄호 확장은 임의의 문자열을 생성하는 데 사용됩니다. 중괄호 확장을 사용하면 단일 인수에서 여러 개의 수정된 명령줄 인수를 만들 수 있습니다. 지정된 문자열은 선택적인 주변 프리앰블 및 포스트스크립트와 가능한 모든 조합을 생성하는 데 사용됩니다. 서문은 중괄호 안에 포함된 각 문자열에 접두어가 붙은 다음 포스트스크립트가 각 결과 문자열에 추가되어 왼쪽에서 오른쪽으로 확장됩니다.
$ echo last{mce,boot,xorg}.log lastmce.log lastboot.log lastxorg.log where last is Preamble and .log is the postscript
위의 echo 문은 세 개의 로그 파일을 별도로 지정하는 것을 방지합니다. 마지막 부트 로그, mce 로그 및 xorg 로그의 내용을 보려면 위의 echo 문과 같이 중괄호 확장을 사용할 수 있습니다.
1. 중괄호 확장을 사용한 백업의 예
$ cat bkup.sh set -x # expand the commands da=`date +%F` cp $da.log{,.bak} $ ./bkup.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log 2010-05-28.log.bak
위의 백업 스크립트에서 확장자가 .bak인 현재 날짜 로그 파일을 복사합니다. 첫 번째 요소는 중괄호 안에 비어 있으므로 첫 번째 요소에는 서문만 있습니다.
2. 중괄호 확장을 사용한 복원 예
$ cat restore.sh set -x # expand the commands da=`date +%F` cp $da.log{.bak,} $ ./restore.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log.bak 2010-05-28.log
복원 스크립트에서 매개변수의 첫 번째 요소는 .bak이고 두 번째 요소는 비어 있습니다.
또한 추가 읽기는 bash 셸 기능에 대한 이전 기사를 참조하십시오.
<센터> 센터>3. 서문과 포스트스크립트가 없는 중괄호 확장의 예
프리앰블과 포스트스크립트가 없으면 중괄호 안에 주어진 요소만 확장합니다.
$ cat expand.sh echo {oct,hex,dec,bin} $ ./expand.sh oct hex dec bin
선택적 서문 및 포스트스크립트 문자열이 없으면 결과는 주어진 문자열의 공백으로 구분된 목록일 뿐입니다.
범위에 대한 중괄호 확장
중괄호 확장은 시퀀스도 확장합니다. 시퀀스는 정수 또는 문자일 수 있습니다.
4. 정수 및 문자 시퀀스의 예
$ cat sequence.sh cat /var/log/messages.{1..3} echo {a..f}{1..9}.txt $ ./sequence.sh May 9 01:18:29 x3 ntpd[2413]: time reset -0.132703 s May 9 01:22:38 x3 ntpd[2413]: synchronized to LOCAL(0), stratum 10 May 9 01:23:44 x3 ntpd[2413]: synchronized to May 9 01:47:48 x3 dhclient: DHCPREQUEST on eth0 May 9 01:47:48 x3 dhclient: DHCPACK from 23.42.38.201 .. .. a1.txt a2.txt a3.txt a4.txt b1.txt b2.txt b3.txt b4.txt c1.txt c2.txt c3.txt c4.txt
첫 번째 cat 명령은 messages.1,messages.2 및 messages.3을 확장하고 내용을 표시합니다. 다음 echo 문에서는 문자와 정수 시퀀스가 결합되어 사용됩니다.
증가 값이 있는 시퀀스
kshell 중괄호 확장에서는 증분 값을 사용하여 시퀀스를 생성할 수 있습니다.
Syntax: <start>..<end>..<incr>
증분은 숫자입니다. 음의 정수를 사용할 수 있지만 정확한 부호는 시작과 끝의 순서에서 추론됩니다.
5. 시퀀스에서 증가를 사용하는 예
$ ksh $ echo /var/log/messages.{1..7..2} /var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7 $
이를 사용하여 대체 요일 로그 파일을 볼 수 있습니다.
Brace 확장의 함정
중괄호 확장은 bash 변수를 확장하지 않습니다. 중괄호 확장은 쉘 확장의 가장 첫 단계이기 때문에 변수는 나중에 확장됩니다.
6. 확장의 변수 예
다음 두 for 문의 출력을 보면 위의 함정을 식별할 수 있습니다.
$ cat var_seq.sh # Print 1 to 4 using sequences. for i in {1..4} do echo $i done start=1 end=4 # Print 1 to 4 using through variables echo "Sequences expressed using variables" for i in {$start..$end} do echo $i done $ ./var_seq.sh 1 2 3 4 Sequences expressed using variables {1..4}