And*_*tri 8 shell bash function arguments
我正在尝试执行下面的代码,但是当我尝试在 if 语句中使用我的函数时-bash: [: too many arguments出现错误。为什么会发生?
先感谢您!
notContainsElement () {
local e match="$1"
shift
for e; do [[ "$e" == "$match" ]] && return 1; done
return 0
}
list=( "pears" "apples" "bananas" "oranges" )
blacklist=( "oranges" "apples" )
docheck=1
for fruit in "${list[@]}"
do
if [ notContainsElement "$fruit" "${blacklist[@]}" -a $docheck = 1 ]
then
echo $fruit
fi
done
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 14
使用时,if [ ... ]您实际上是在使用该[实用程序(这与test但要求最后一个参数是 相同])。
[不明白运行你的函数,它需要字符串。幸运的是,这里根本不需要使用[(至少对于函数而言):
if [ "$docheck" -eq 1 ] && notContainsElement "$fruit" "${blacklist[@]}"; then
...
fi
Run Code Online (Sandbox Code Playgroud)
请注意,我还首先检查了整数,这样如果$docheck不是 1 ,我们就可以完全避免调用该函数。
这是有效的,因为if采用任意命令并根据该命令的退出状态决定要做什么。在这里,我们将[ ... ]测试与对您的函数的调用结合使用,并&&在两者之间创建一个复合命令。如果[ ... ]测试和函数的退出状态都返回零,表示成功,则复合命令的退出状态将为真。
作为一个样式注意,我不会有功能测试数组是否确实不包含该元素,但无论如果不包含元素,然后
if [ "$docheck" -eq 1 ] && ! contains "$fruit" "${blacklist[@]}"; then ...
Run Code Online (Sandbox Code Playgroud)
在您确实想要测试数组是否包含元素 ( if ! notContainsElement ...) 的情况下,让函数测试结果为负值会弄乱逻辑。
| 归档时间: |
|
| 查看次数: |
6904 次 |
| 最近记录: |