1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェルevalの環境変数を変数で取得する方法

2022-02-08 02:49:54

シナリオ

  • システム内に環境変数が存在する USER=iceber
  • スクリプト内に変数が存在します env_name=USER
  • 環境変数USERの値は、変数env_nameから取得する必要があります。

エラー例

$ # Environment variable USER already exists in the environment
$ env_name=USER
$ echo ${$env_name}
${$env_name}: bad substitution


明らかに、値を取得するために直接ネストされた$を使用しては動作しません。

正しい例

$ # Environment variable already exists in the environment USER
$ env_name=USER
$ eval echo '$'$env_name
icebergu


eval は引数を変数に置き換えてから、コマンドとして実行します。

eval echo '$'$env_naem

  • まず $env_name が USER に置き換えられ、前の '$' で $USER という文字列になり、コマンドは実際に eval echo $USER になります。
  • そして、再度eval echo $USERで環境変数の取得が完了します。

上記の解析からわかるように、このコマンドは実際には eval echo \$$env_name と書くことができ、これも動作します。

同様に、ある変数が他の変数の名前を持っている場合、eval を使ってその変数の値を取得することができます。

シェルevalの変数から環境変数を取得する方法については、今回で終わりです。Shell eval による環境変数の取得方法については、Script House の過去の記事を検索するか、以下の関連記事を引き続き参照してください。