我有这个包含函数,它应该检查数组是否具有特定值。数组本身作为第一个参数传递,值是第二个参数。
#!/usr/bin/env bash
set -e;
branch_type="${1:-feature}";
arr=( 'feature', 'bugfix', 'release' );
contains() {
local array="$1"
local seeking="$2"
echo "seeking => $seeking";
# for v in "${!array}"; do
for v in "${array[@]}"; do
echo "v is $v";
if [ "$v" == "$seeking" ]; then
echo "v is seeking";
return 0;
fi
done
echo "returning with 1";
return 1;
}
if ! contains "$arr" "$branch_type"; then
echo "Branch type needs to be either 'feature', 'bugfix' or 'release'."
echo "The branch type you passed was: $branch_type"
exit 1;
fi
echo "all goode. branch type is $branch_type";
如果您在没有任何参数的情况下运行脚本,它应该可以工作,因为默认值为“功能”,但由于某种原因,搜索不匹配任何内容。我没有收到错误消息,但包含的功能没有按预期工作。
当我运行不带任何参数的脚本时,我得到:
seeking => feature
v is feature,
returning with 1
Branch type needs to be either 'feature', 'bugfix' or 'release'.
The branch type you passed was: feature
现在这很奇怪
注意:我将展示如何解决这个问题,以便它在 Bash 4 中工作。
我认为您将数组错误地传递给函数:
我稍微改变了一些东西,它现在看起来可以工作了:
变化
我只对您的原始脚本进行了 2 处修改。我更改了
contains()
调用函数的方式,以便它arr
为这一行传递数组的裸名:contains()
并在使用传入参数设置数组的函数内部更改了这一行,将引号从局部变量的设置中去掉array
:参考
一些适用于 Bash3 的惯用语如下所示:
真正的挂断是我试图这样做:
但这是必要的: