Betriebssystem : Ubuntu 16.04.3
Shell : Bash 4.3.48
Ich weiß, dass es möglich ist, den Inhalt einer Variablen wie in vorübergehend zu ändern var=value command, was wahrscheinlich IFS= read -r varder bemerkenswerteste Fall ist.
Und dank Gregs Wiki verstehe ich auch:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
Was meinem Verständnis entgeht, ist folgendes:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
Soweit ich weiß (und nach der Logik der vorherigen Beispiele), sollte es nicht gedruckt barwerden (bar baz).
Passiert das nur mir? Ist das das beabsichtigte Verhalten und ich vermisse etwas? Oder ist das ein Bug?
export var=(foo bar); echo "${var[0]}"es drucke foo, nicht (foo bar).
exportihm zeigt:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_arraygibt hier keine Ausgabe aus.
foo() { declare -p var; } ; var=(bar baz) foogibt declare -x var="(bar baz)"Bestätigung, dass es als Zeichenfolge behandelt wird, nicht als Array