Linux의 중첩 변수 대체 및 사전 정의된 BASH 변수 - 11부
변수에 대해 자세히 논의한 BASH Shell의 마지막 두 기사는 독자들 사이에서 높은 평가를 받았습니다. 우리 Tecmint-Team은 귀하에게 최신, 최신 및 관련 주제를 자세히 제공하기 위해 최선을 다하고 있습니다. 또한 우리는 항상 해당 주제에 대한 주요 관점을 다루려고 노력합니다.
다음은 이 주제를 닫기 전에 변수 대체 및 Shell에 정의된 변수를 살펴보는 Linux 변수에 대한 마지막 기사입니다.
Bash는 명령이 실제로 실행되기 전에 변수 대체를 수행합니다. Linux Bash Shell은 명령을 실행하기 전에 모든 '$' 기호를 검색하고 이를 변수 값으로 바꿉니다. Bash 변수 대체 프로세스는 한 번만 수행됩니다. 중첩된 변수가 있으면 어떻게 되나요?
참고: 중첩 변수란 변수 내부에 선언된 변수를 의미합니다. 아래 예에서 위의 시나리오를 살펴보겠습니다.
아래와 같이 읽기 전용이고 실행 가능한 변수를 선언합니다.
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
저장된 변수의 값을 확인하세요.
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
이제 다시 읽기 전용이고 실행 가능한 또 다른 변수를 선언하십시오.
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
이제 상황은 두 가지 변수를 정의했습니다.
'Linux_best_website', 값은 "linux-console.net"
및 값이 "Linux_best_website"인 'Linux_website'
아래 한 줄 명령을 실행하면 결과는 어떻게 될까요?
avi@localhost:~$ printf "%s" "$Linux_website"
먼저 '$Linux_website' 변수를 "Linux_best_website " 값으로 대체해야 하며 그런 다음 "$Linux_best_website "는 다시 값이 변수입니다. 이는 "linux-console.net "입니다. 따라서 아래 명령을 실행하면 최종 출력이 다음과 같아야 합니다.
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
하지만 불행하게도 이는 상황이 아닙니다. 우리가 얻는 결과는 Linux_best_website입니다.
이유? 예! Bash는 변수 값을 한 번만 대체합니다. 변수를 자주 대체해야 하고 변수를 두 번 이상 대체해야 하는 복잡한 스크립트와 프로그램은 어떻습니까?
여기에는 스크립트에서 변수 대체에 대한 추가 작업을 두 번 이상 수행하는 'eval' 명령이 있습니다. 다음은 전체 작업을 유리처럼 명확하게 만드는 예입니다.
값이 10인 변수 x를 선언합니다.
avi@localhost:~/Desktop$ declare x=10
방금 정의한 변수 x의 값을 확인하세요.
avi@localhost:~/Desktop$ echo $yx
x10
값이 x인 변수 y를 선언합니다.
avi@localhost:~/Desktop$ declare y=x
방금 정의한 변수 y의 값을 확인하세요.
avi@localhost:~/Desktop$ echo $y
x
여기에 추가 변수 대체 라운드를 수행하지 않는 일회성 변수 대체의 BASH 문제가 있습니다. 이 문제를 해결하기 위해 'eval' 명령을 사용하고 있습니다.
avi@localhost:~/Desktop$ eval y=$x
이제 변수 'y'의 값을 확인하세요.
avi@localhost:~/Desktop$ echo $y
10
만세! 문제가 해결되었으며 'eval' 명령이 승리했습니다 :)
말할 것도 없이, 'eval' 명령은 대규모 스크립트 프로그램에서 매우 유용하며 매우 편리한 도구입니다.
이 게시물의 마지막 부분은 BASH 사전 정의 변수입니다. 아니요! 이 목록을 보고 당황하지 마세요. 몇 가지를 제외하고 스크립트 작성을 시작하기 전에 전체 목록을 기억할 필요는 없습니다. 학습 과정의 일환으로 BASH 사전 정의 변수 목록을 제시합니다.
No. | BASH VARIABLE | RESULT |
1 | auto_resume | Process command completion for the stopped jobs. |
2 | BASH | PATH of the shell. |
3 | BASH_ENV | Shows the name of the profile file |
4 | BASH_VERSION | Shows the version of Bash |
5 | BASH_VERSINFO | Shows Detailed version information. |
6 | BASH_VERSINFO[0] | The major version number (the release). |
7 | BASH_VERSINFO[1] | The minor version number (the version). |
8 | BASH_VERSINFO[2] | The patch level. |
9 | BASH_VERSINFO[3] | The build version. |
10 | BASH_VERSINFO[4] | The release status (for example, beta1 ). |
11 | BASH_VERSINFO[5] | The value of MACHTYPE . |
12 | CDPATH | List of directories separated by colon. |
13 | COLUMNS | Number of Characters per line on Standard Output. |
14 | EUID | User ID of the current user. |
15 | FCEDIT | The default text editor for the fc command. |
16 | FUNCNAME | The name of the fun |
17 | GROUPS | Groups of which the user is a Member. |
18 | HISTFILE | The file containing the command history. |
19 | HOME | The name of your home directory. |
20 | LINES | Number of horizontal lines on Standard Output. |
21 | Name of a file to check for incoming mail | |
22 | OSTYPE | Name of the operating system. |
23 | OLDPWD | The previous working directory |
24 | PWD | The current working directory |
25 | RANDOM | Prints a random number |
26 | SHELL | The preferred shell to use |
27 | TIMEFORMAT | The format for the time command. |
28 | UID | The ID of the current user |
사전 정의된 BASH 변수의 방대한 목록이 있습니다. 우리는 가장 자주 사용되는 목록을 작성하려고 노력했습니다.
지금은 여기까지입니다. 또 다른 흥미로운 기사로 찾아오겠습니다. 그때까지 TecMint에 계속 관심을 갖고 연결해 주세요. 아래 댓글 섹션에 귀중한 피드백을 제공하는 것을 잊지 마세요.