次の構造は 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\" ; }
あなたが得ることができるほど良い