動的に名前付きシェル変数に値を移植可能に割り当てる

動的に名前付きシェル変数に値を移植可能に割り当てる

次の構造は Slackware 14.2 の Almquist シェルでサポートされていますが、Debian の Almquist シェルではサポートされていません。 Bourneのような他のシェルの場合はそうではありません。

setvar "$varname" <...>

Bashは明らかに能力があります変数名を動的に生成

declare "magic_variable_$1=$(ls | tail -1)"

$1それでも(考え)=に登場できるキャラクターには限界があるようです。

これは、Bash 4.0より前の偽の連想配列の回避策として推奨されます。

eval.

注:この機能は何らかの理由で使用しないでください。完全に安全ではありません。

assign_dynamically() {
    eval "$1='$2'"
}

ただし、値にスペースやメタ文字が$2含まれてい'てサポートされていない場合、この機能はブロックされるため、解決$1策ではありません。

両方の文字列の内容にかかわらず、名前付き$2変数に割り当てることができる関数を作成するための移植可能/POSIX準拠の方法はありますか?$1

答え1

どんな文字列でもありません。最初のパラメーターは有効な変数名でなければなりません。

dynamic_assign(){ eval "$1"=\"\$2\" ; }

あなたが得ることができるほど良い

関連情報