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 varlà 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 barchứ 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).
exportnó cho thấy:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_arraykhông có đầu ra ở đây.
foo() { declare -p var; } ; var=(bar baz) foocung 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