2017-02-08 23 views
0

他のbash変数を設定するために、いくつかのPHP変数の値をbashスクリプトに取得しようとしています。基本的には、可変変数名の値にアクセスできる必要があります。bashスクリプトで変数名を使用する方法

スクリプトが&は、ファイルを読み込んでPHPの変数を見つけることが、私はそれらを設定しようとすると、それだけでハング見つけることができます。ここで私が持っているものです。

variables=(database_user database_password dbase); 

paths=(modx_core_path modx_connectors_path modx_manager_path modx_base_path); 

for index in "${variables[@]}"; do 
index=\$$index 
echo $index; 
$index="$(grep -oE '\$${!index} = .*;' $config | tail -1 | sed 's/$${!index} = //g;s/;//g')"; 
done 

ない私がここで間違ってやっているのかわから...

+0

@ 123、参考としてABSを提案しないでください。悪い習慣を披露するのはむしろ悪名高い。 [BashFAQ#6](http://mywiki.wooledge.org/BashFAQ/006)は、間接的変数の最新かつ積極的な議論です。 –

答えて

1

あなたは間接的な割り当てを実行しようとしています。

あなたは次の2行を取り除く必要があり

きれいに間接的な拡張を行い
echo "${!index}" 

(あなたの名前に含まれている変数の値を与える:単純に書き込むことで

index=\$$index 
echo $index; 

変数index)。

次に、問題のラインはこの1つである:

bashで
$index="$(grep -oE '\$${!index} = .*;' ... (rest omitted) 

、割り当ては$で始めることはできません。あなたは間接的な割り当てを実行することができます

一つの方法は、(上記で示唆したようindex再割り当てを削除した後)これです:

printf -v "$index" "$(grep -oE '\$${!index} = .*;' ... (rest omitted) 

これは、最終的なとして渡された値を起こしprintf-vオプションを使用しています変数に代入する引数。その名前は-vオプションに渡されます。彼らはコードとして(潜在的に制御されていない)データを使用するよう

は、間接的な割り当て/拡張を処理する他の方法、コードインジェクションのリスクを持ついくつかあります。これはあなたがさらに研究したいことかもしれません。

私は実際grepコマンド置換の作品を(私がテストしていない)と仮定していますのでご注意ください。

関連する問題