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 var
der 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 bar
werden (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)
.
export
ihm zeigt:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
gibt hier keine Ausgabe aus.
foo() { declare -p var; } ; var=(bar baz) foo
gibt declare -x var="(bar baz)"
Bestätigung, dass es als Zeichenfolge behandelt wird, nicht als Array