5

部分的に動的な名前の変数を作成し、bashシェルスクリプトからエクスポートしたいと思います。私はそれを次のようにしようとしてきました。しかし成功しません。どこが間違っているのか教えてください。

#!/bin/bash
CURRENT_PROCESS_ID=$$
var=METASTORE_JDBC_DRIVER_$CURRENT_PROCESS_ID
echo $var
export $var='1'

実行コマンド

bash <filename>.sh

スクリプトが次のような環境変数を作成することを望んでおり、スクリプトMETASTORE_JDBC_DRIVER_8769からそれを使用できるはずですが、スクリプトの echo $METASTORE_JDBC_DRIVER_8769外部で実行しても何も得られません。任意の提案/アイデアを歓迎します。

4

2 に答える 2

8

${!var}Bashバージョン2では、動的に作成された変数名(別名「間接参照」)のはるかに直感的な表記法が導入されました...

a=letter_of_alphabet
letter_of_alphabet=z

echo "a = $a"           # Direct reference.

echo "Now a = ${!a}"    # Indirect reference.  (a = z)
#  The ${!variable} notation is more intuitive than the old
#+ eval var1=\$$var2

詳細と例については、http://tldp.org/LDP/abs/html/bashver2.html#EX78を参照してください。

eval var1=\$$var2よりよく知られている手法を使用した詳細と例については、http://tldp.org/LDP/abs/html/ivr.htmlを参照してください。

于 2013-05-06T05:02:42.627 に答える
6

エクスポートは、変数を現在のシェルコンテキストにエクスポートします。スクリプトをbashで実行すると、そのシェルのコンテキストに設定されます。現在のシェルコンテキストで実行するには、ファイルをソースする必要があります。

source <filename>.sh

サブシェルとソースの違いを示すためだけに:

[nedwidek@yule ~]# bash test.sh
METASTORE_JDBC_DRIVER_8422
[nedwidek@yule ~]# env |grep META
[nedwidek@yule ~]# source test.sh
METASTORE_JDBC_DRIVER_8143
[nedwidek@yule ~]# env |grep META
METASTORE_JDBC_DRIVER_8143=1
于 2013-01-28T17:00:11.700 に答える