2016-08-20 9 views
1

次のように、bashでエイリアス経由で値を設定したいと考えています。bashのエイリアス経由で変数に値を設定できますか?

ORIGINAL_VALUE="a" 
ALIAS="ORIGINAL_VALUE" 
"$ALIAS"="b" # This line does not work. 
echo "value is $ORIGINAL_VALUE" 

私が期待した結果が今、私は

${!ALIAS} 

でALIAS経由ORIGINAL_VALUEの値を読み取るために。しかし、残念ながら、私にはわからないことも可能である知っている

value is b 

です"ALIAS" = "b"のように、ALIASを介してORIGINAL_VALUEの値を設定する方法。これは動作しません。

解決策や提案をお持ちの方は、教えてください。 ありがとうございます。

eval $ALIAS=b 
+1

を使用してください - あなたはあなたの意味について混乱人々を避けるために、別の用語を使用することを試みる場合があります。 –

+1

BTW、http://mywiki.wooledge.org/BashFAQ/006#Assigning_indirect.2Freference_variables –

+0

変数の参照の包括的な指示を私に与えてくれたCharles Duffyさん、ありがとうございます。ちなみに、この質問は重複しているとマークしました。この質問を削除する必要がありますか?私は寄稿者に申し出ても、削除された点は残念です。 – mora

答えて

3

`alias`は、シェルのキーワードであるnameref(bash 4.3以降)

$ declare -n alias=original_value 
$ original_value=a 
$ alias=b 
$ echo "$original_value" 
b 
+0

ニース! * my bashがそれを行うことができることは決して知りませんでした。 – hek2mgl

+0

ありがとう、chepner。それは私のbashで動作します。あなたの答えは私の質問に対する直接的な答えだと思います。他の回答ももちろんありますし、互換性の利点もあります。ありがとうございました。 – mora

0

関数のスコープ外から変数の値を変更したい場合は、0123以降は機能しませんその場合、はローカルで変数を再宣言します。

+0

ありがとうKaroly Horvath。私は上記の点を提示した。 – mora

3

あなたがdeclare使用することができます:あなたがにこれを入れた場合:

ORIGINAL_VALUE="a" 
ALIAS="ORIGINAL_VALUE" 
declare $ALIAS="b" 
echo "value is $ORIGINAL_VALUE" 

出力:

value is b 

サイドノートを使用すると、変数が安全で信頼できると仮定すると、

+1

ありがとう、hek2mgl。あなたのソリューションとサイドノートは私にとって素晴らしい情報でした。元の変数をグローバル変数としてリセットする必要があります。今回は、chepnerからの解決策が良い方法だと思われます。ありがとうございました。 – mora

+0

あなたは大歓迎です。私は、あなたがbash-4.3を持っていて、他のシェルを気にしないなら、chepnerの答えがより良い選択であることに同意します。 – hek2mgl

関連する問題