【发布时间】:2016-02-19 22:46:27
【问题描述】:
我有这个脚本:
#!/bin/bash
function contains() {
local -n array=$1
local value=$2
for item in "${array[@]}"; do
[ "$item" = "$value" ] && return 0
done
return 1
}
array=(a "b c" "d")
value="b c"
contains array value
运行它我得到这个错误:
***: line 6: warning: array: circular name reference
这是什么意思?如何解决这个问题?
【问题讨论】:
-
将
array=(a "b c" "d")重命名为somethingelse=(a "b c" "d") -
@amdixon 是的,这有帮助,但
local -n array=$1不应该工作吗? -
当你执行
contains array value时,函数的第一行变成了local -n array=array。看到循环引用了吗? -
查看 BashFAQ/048 中的确切问题,顺便说一句:mywiki.wooledge.org/BashFAQ/048#line-120。
-
@4ae1e1 这将是一个很好的答案
标签: bash