ウェブサイト検索

Linux におけるネストされた変数置換と事前定義された BASH 変数 - パート 11


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

Linux 変数に関する最後の記事では、このトピックを閉じる前に変数の置換とシェルで定義された変数について説明します。

Bash は、コマンドが実際に実行される前に変数置換を実行します。 Linux Bash シェルは、コマンドを実行する前にすべての「$」記号を検索し、それを変数の値に置き換えます。 Bash 変数の置換プロセスは 1 回だけ実行されます。ネストされた変数がある場合はどうなるでしょうか?

: ネストされた変数とは、変数内で宣言された変数を意味します。上記のシナリオを以下の例で見てみましょう。

以下のように読み取り専用で実行可能な変数を宣言します。

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"

現在の状況は、2 つの変数を定義したことです。

「Linux_best_website」、その値は「linux-console.net」です
そして、「Linux_website」。その値は「Linux_best_website」です。

以下の 1 行コマンドを実行すると、結果はどうなるでしょうか?

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 は変数の値を 1 回だけ置き換えます。変数を頻繁に置換する必要があるだけでなく、変数を複数回置換する必要がある複雑なスクリプトやプログラムについてはどうすればよいでしょうか?

ここで、スクリプト内で変数置換の追加作業を複数回実行するコマンド 'eval' を使用します。ここでは、全体の動作をガラスのように透明にする例を示します。

変数 x を宣言します。その値は 10 です。

avi@localhost:~/Desktop$ declare x=10

先ほど定義した変数 x の値を確認します。

avi@localhost:~/Desktop$ echo $yx

x10

変数 y を宣言し、その値は x です。

avi@localhost:~/Desktop$ declare y=x

先ほど定義した変数 y の値を確認します。

avi@localhost:~/Desktop$ echo $y 

x

ここでBASH の 1 回限りの変数置換の問題があります。これは追加の変数置換を実行しません。これを修正するために「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 MAIL 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 にご注目ください。以下のコメントセクションに貴重なフィードバックをお寄せください。