2017-12-07 6 views
0

他の環境変数にどのようにアクセスできますか?私は、実行が私にbashの不正な置換 - 別の環境変数にアクセスする

temp.sh: line 9: ${${component}_version}}: bad substitution 
+0

これは、$ {component} _versionの内容を単にエコーしたい場合に機能します。今はどのように値を別の変数に割り当てることができますか? b = 'eval" echo \ $$ {component} _version "'のようなものですか? その仕事はありますか? – user4380125

+0

実際には、version = 'eval" echo \\ $$ {component} _version "'のように見えます。 – user4380125

+0

変数の内容を悪意のあるものとして信頼しない場合にのみ動作します。 'component = '(rm -rf〜)''ならば、あなたはそれを実行すると非常に悪い場所にいます。他の(非 'eval'ベースの)パラメータ拡張構文は、これらのリスクを伴いません。 [BashFAQ#48](http://mywiki.wooledge.org/BashFAQ/048)も参照してください。なぜ 'eval'が一般的に推奨されないのですか? –

答えて

1

を与えた後、あなたがこれを行うにはevalを使用することができますbashスクリプト私のシェルで

#!/usr/bin/env bash 

set -x 

export A_version=1.0.0 

component=A 

echo ${${component}_version}} 

を次のように持っています。ここで1.0.0を印刷し、スクリプトの作業バージョンは次のとおりです。

export A_version=1.0.0 
component=A 
eval "echo \$${component}_version" 

詳細については、こちらのページを参照してください。

http://tldp.org/LDP/abs/html/ivr.html

更新:はバッシュで同じことを行うための安全な方法次のようになります。

export A_version=1.0.0 
component=A 
var=${component}_version; echo "${!var}" 

あなたはで、このスクリプトを実行する必要があります注意ではなく、shです。

+0

間接評価のために 'eval'を奨励しないでください。*またはABSを参考にしてください。*これはbashのW3Schoolsです。私たちがfreenode #bashチャンネルでやっていることの半分は、人々がそこで拾った悪い習慣を放棄するのに役立ちます。 [BashFAQ#6](http://mywiki.wooledge.org/BashFAQ/006)は、ベストプラクティスにもっと積極的に焦点を絞った間接的変数の使用に関する参考資料です。 bash-hackersのwikiも[パラメータ拡張に関するそのページの間接参照](http://wiki.bash-hackers.org/syntax/pe#indirection)をカバーしています。 –

+0

[該当マニュアルページ](https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html)の「間接拡張」を検索することもできます。 –

+0

あなたの提案はOPの問題を解決するようには思われません。 –

関連する問題