Linux におけるネストされた変数置換と事前定義された BASH 変数 - パート 11
BASH シェルに関する最後の 2 つの記事では、変数について詳しく説明しており、読者の間で高く評価されました。私たちTecmint チームは、詳細に取り上げられた最新の関連トピックを提供することに非常に熱心です。さらに、私たちは常に、対応するトピックの主要な視点に触れるよう努めています。

Linux 変数に関する最後の記事では、このトピックを閉じる前に変数の置換とシェルで定義された変数について説明します。
Bash は、コマンドが実際に実行される前に変数置換を実行します。 Linux Bash シェルは、コマンドを実行する前にすべての「$」記号を検索し、それを変数の値に置き換えます。 Bash 変数の置換プロセスは 1 回だけ実行されます。ネストされた変数がある場合はどうなるでしょうか?
注: ネストされた変数とは、変数内で宣言された変数を意味します。上記のシナリオを以下の例で見てみましょう。
以下のように読み取り専用かつ実行可能な変数を宣言します。
:~$ declare -rx Linux_best_website="linux-console.net"
格納されている変数の値を確認してください。
:~$ printf "%s" "$Linux_best_website" linux-console.net
ここで、やはり読み取り専用で実行可能である別の変数を宣言します。
:~$ declare -rx Linux_website="Linux_best_website"
現在の状況は、2 つの変数を定義したことです。
「Linux_best_website」、その値は「linux-console.net」です
以下の 1 行コマンドを実行すると、結果はどうなるでしょうか?
:~$ printf "%s" "$Linux_website"
まず変数 '$Linux_website' を値 \Linux_best_website に置き換えます。その後、\$Linux_best_website が再び変数になります。その値は \linux-console.net” です。したがって、以下のコマンドを実行すると、最終出力は次のようになります。
:~$ printf "%s" "$Linux_website" linux-console.net
しかし、残念ながら、これは状況ではありません。得られる出力は Linux_best_website です。
理由?うん! Bash は変数の値を 1 回だけ置き換えます。変数を頻繁に置換する必要があるだけでなく、変数を複数回置換する必要がある複雑なスクリプトやプログラムについてはどうすればよいでしょうか?
ここで、スクリプト内で変数置換の追加作業を複数回実行するコマンド 'eval' を使用します。ここでは、全体の動作をガラスのように透明にする例を示します。
変数 x を宣言します。その値は 10 です。
:~/Desktop$ declare x=10
先ほど定義した変数 x の値を確認します。
:~/Desktop$ echo $yx x10
変数 y を宣言し、その値は x です。
:~/Desktop$ declare y=x
先ほど定義した変数 y の値を確認します。
:~/Desktop$ echo $y x
ここでBASH の 1 回限りの変数置換の問題があります。これは追加の変数置換を実行しません。これを修正するために「eval」コマンドを使用しています。
:~/Desktop$ eval y=$x
次に、変数「y」の値を確認します。
:~/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 にご注目ください。以下のコメントセクションに貴重なフィードバックをお寄せください。