Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash 중괄호 확장 자습서:중괄호 내 확장 표현식의 6가지 예

Bash 셸 확장

Bash 중괄호 확장 자습서:중괄호 내 확장 표현식의 6가지 예쉘이 입력을 분석할 때 하는 동작 중 하나가 셸 확장이다. 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}