作业系统:Ubuntu 16.04.3
外壳:Bash 4.3.48
我知道可以像中那样临时更改变量的内容var=value command
,这可能IFS= read -r var
是最值得注意的情况。
而且,感谢Greg的Wiki,我也了解:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
我无法理解的是:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
据我所知(按照前面示例的逻辑),它应该打印bar
,而不是(bar baz)
。
这只会发生在我身上吗?这是预期的行为,我缺少什么吗?还是这是一个错误?
export var=(foo bar); echo "${var[0]}"
可以打印foo
,但不能打印(foo bar)
。
export
它显示:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
此处不提供任何输出。
foo() { declare -p var; } ; var=(bar baz) foo
提供declare -x var="(bar baz)"
确认其被视为字符串而不是数组的方法