Bash 셸은 물결표 확장이라고 하는 '~' 접두사가 붙은 일부 변수를 제공합니다.
쉘 내 다른 변수의 내용에 대한 동의어입니다.
물결표 확장은 이러한 약어를 해당 약어가 나타내는 디렉토리 이름으로 변환하는 프로세스입니다. 이 기사에서는 예제와 함께 물결표 확장 기능을 검토해 보겠습니다.
물결표 확장은 '~'에 적용되며 +, – 및 N(정수)이 최대 공백 또는 슬래시까지 포함됩니다. .
물결표 확장은 여러 특정 경로 이름으로 확장하는 데 사용됩니다.
- 홈 디렉토리
- 현재/이전 작업 디렉토리
- 디렉토리 스택의 디렉토리.
홈 디렉토리
물결표 확장은 현재 사용자의 홈 디렉터리 또는 지정된 사용자 이름의 홈 디렉터리를 확장하는 방법을 제공합니다.
Syntax ~ Expand to the variable $HOME or home directory of the current user ~USER Expand to the home directory of the given username
예 1. 현재 사용자 홈
물결표(~)는 별도의 단어로 정의되어 있으면 $HOME으로 확장되고, $HOME이 정의되어 있지 않으면 현재 사용자의 홈 디렉토리로 확장됩니다.
이제 HOME 변수의 값은 /home/oracle이므로 cd ~는 현재 디렉토리를 $HOME의 값으로 변경했습니다.
<센터> 센터>## Logging into a oracle user, whose home directory is /home/oracle # su oracle [tmp]$ pwd /tmp [tmp]$ echo $HOME /home/oracle [tmp]$ cd ~ [~]$ pwd /home/oracle
HOME은 /sbin으로 변경되며 cd ~는 사용자의 홈 디렉토리가 아닌 $HOME만 사용합니다. $HOME의 값을 설정 해제한 후 cd ~는 디렉토리를 /etc/passwd에 있는 oracle 사용자에 대해 설정된 홈 디렉토리 값으로 변경했습니다. 물결표 확장의 경우 HOME이 실제 홈 디렉토리보다 우선합니다.
[~]$ export HOME=/sbin [oracle]$ cd ~ [~]$ pwd /sbin [~]$ unset HOME [sbin]$ cd ~ [oracle]$ pwd /home/oracle
예시 2. 주어진 사용자의 홈 디렉토리
다음 스크립트는 이름에 현재 날짜가 있는 로그 파일을 백업합니다. 또한 Oracle 사용자의 홈 디렉토리에 있는 backup.log라는 파일에 시작 시간과 종료 시간을 기록합니다.
#! /bin/bash echo "Initiating the backup at `date`" >> ~oracle/backup.log da=`date +%F` cp $da.log{,.bak} echo "END BACKUP at `date`" >> ~oracle/backup.log $ ls -l /home/oracle/ total 8 -rw-r--r-- 1 root root 99 Jun 4 14:23 backup.log
주어진 사용자 이름이 존재하지 않으면 무언가로 확장되지 않습니다. 다음 예에서는 ora라는 사용자가 없습니다. 따라서 ~ora는 /home/ora로 확장되지 않습니다.
$ echo ~ora ~ora
bash에서 중괄호 확장을 수행하는 방법을 이해하려면 이전 기사를 참조하십시오. 즉, bash에서 { }를 사용하는 방법입니다.
작업 디렉토리
+ 및 -가 있는 물결표는 작업 디렉토리를 나타내는 데 사용됩니다.
- ~+는 현재 작업 디렉토리를 보유하는 PWD 변수의 값으로 확장됩니다.
- ~- 이전 작업 디렉토리를 보유하는 OLDPWD 변수의 값으로 확장합니다. OLDPWD가 설정되지 않으면 ~-가 확장되지 않습니다.
예시 3. 이전/현재 작업 디렉토리 확장
다음 예는 현재 디렉토리와 이전 작업 디렉토리에 있는 파일을 비교합니다.
$ cat comp.sh #! /bin/bash set -x cd /var/opt/gg if [ -f gg.c ] then echo "File1 exists" fi cd /var/opt1/gg if [ -f gg.c ] then echo "File2 exists" cmp ~+/gg.c ~-/gg.c fi $ ./comp.sh + cd /var/opt/gg + '[' -f gg.c ']' + echo 'File1 exists' File1 exists + cd /var/opt1/gg + '[' -f gg.c ']' + echo 'File2 exists' File2 exists + cmp /var/opt1/gg/gg.c /var/opt/gg/gg.c cmp: EOF on /var/opt1/gg/gg.c $
위의 실행에서:
- ~+/gg.c가 /var/opt1/gg/gg.c로 확장됩니다.
- ~-/gg.c가 /var/opt/gg/gg.c로 확장됨
이 기사는 진행 중인 Bash Tutorial 시리즈의 일부입니다.
스택의 디렉토리 확장
각 bash 프로세스에는 디렉토리 내용의 데이터를 처리하는 동안 스크립트가 방문한 디렉토리를 추적하는 데 사용할 수 있는 스택 개체가 포함되어 있습니다.
디렉토리를 참조하거나 이전에 방문했던 디렉토리로 다시 변경하는 것은 매우 간단한 메커니즘입니다. 물결표 확장은 디렉토리 스택의 디렉토리에 대한 확장도 제공합니다.
- ~+N 0부터 시작하여 디렉토리 스택의 N번째 디렉토리를 확장합니다(옵션 없이 호출될 때 dirs에 의해 인쇄된 목록의 왼쪽부터 계산).
- ~-N 0부터 시작하여 디렉토리 스택의 N번째 디렉토리(옵션 없이 호출될 때 dirs에 의해 인쇄된 목록의 오른쪽부터 계산)를 확장합니다.
이전 기사를 검토하여 dirs, pushd 및 popd 명령을 사용하여 디렉토리 스택을 조작하는 방법을 이해하십시오.
예 4. ~+를 사용하여 왼쪽에서 N번째 디렉토리 표시
다음 예에서 디렉토리 스택에는 4개의 디렉토리가 있습니다. ~+2는 0부터 시작하여 왼쪽에서 두 번째 위치에서 사용 가능한 디렉토리 경로를 제공합니다.
$ dirs -v 0 /sbin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root $ cd ~+2 $ pwd /var/opt/GG/bin
그러나 스택의 맨 위(제로 위치)에는 항상 현재 디렉토리가 있습니다. 따라서 위의 실행 후 디렉토리 스택에 다음과 같이 표시됩니다.
$ dirs -v 0 /var/opt/GG/bin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root
예 5. ~-를 사용하여 오른쪽에서 N번째 디렉토리 표시
다음은 위의 예와 유사합니다. 그러나 ~- 때문에 스택의 맨 아래부터 디렉토리를 고려합니다.
$ dirs -v 0 /var/opt/GG/bin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root $ cd ~-2 $ pwd /var/opt/midas $ dirs -v 0 /var/opt/midas 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root