HĐH : Ubuntu 16.04.3
Vỏ : Bash 4.3.48
Tôi biết rằng có thể tạm thời thay đổi nội dung của một biến như trong var=value command
, có lẽ IFS= read -r var
là trường hợp đáng chú ý nhất của điều này.
Và, nhờ wiki của Greg , tôi cũng hiểu:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
Điều thoát khỏi sự hiểu biết của tôi là thế này:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
Theo như tôi biết (và theo logic của các ví dụ trước), thì nó nên in bar
chứ không phải (bar baz)
.
Điều này chỉ xảy ra với tôi? Đây có phải là hành vi dự định và tôi đang thiếu một cái gì đó? Hay đây là một lỗi?
export var=(foo bar); echo "${var[0]}"
nó in foo
, không (foo bar)
.
export
nó cho thấy:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
không có đầu ra ở đây.
foo() { declare -p var; } ; var=(bar baz) foo
cung cấp declare -x var="(bar baz)"
xác nhận nó được coi là một chuỗi, không phải là một mảng