Es scheint, dass der empfohlene Weg in bash indirekten variablen Einstellung zu tun, ist die Verwendung eval
:Indirekte Variablenzuweisung in bash
var=x; val=foo
eval $var=$val
echo $x # --> foo
Das Problem ist die übliche mit eval
:
var=x; val=1$'\n'pwd
eval $var=$val # bad output here
(und Da es an vielen Stellen empfohlen wird, frage ich mich, wie viele Skripte sind deshalb anfällig ...)
In jedem Fall die offensichtliche Lösung von usin g (entkommen) Anführungszeichen funktioniert nicht wirklich:
var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\" # fail with the above
Die Sache ist die, dass bash indirekten variablen Referenz in (mit ${!foo}
) gebacken, aber ich sehe keine solche Art und Weise indirekte Zuordnung zu tun - ist Gibt es einen vernünftigen Weg, dies zu tun?
Für die Aufzeichnung habe ich eine Lösung finden, aber das ist nicht etwas, das ich betrachten würde „gesund“ ...:
eval "$var='"${val//\'/\'\"\'\"\'}"'"
Der Indirektionsoperator auf der RHS ist nicht das, was ich suche. –
(* Stirnschlag *) Bah, ich habe völlig vermisst, warum ich Indirection auf der RHS will. Da deine Antwort nicht darüber spricht, werde ich es jetzt bearbeiten, anstatt die Antwort-mich-und-pat-meine-eigene-zurück-zu machen ... –
Fantastisch! In der Vergangenheit habe ich einen komplizierten Eve-Export-Quatsch gemacht. Vielen Dank. Für die Googler, gehen Sie mit der obigen Antwort, nicht das Eval-Export-Format. – bgStack15