bash - 如果数组不包含if语句中的值,bash如何插入数组
问题描述
我有一个函数来检查数组中是否有东西:
function inArray() {
local val="$1"
shift
local array=("$@")
for i in "${array[@]}"; do
if [ "${i}" == "${val}" ]; then
return 0
fi
done
return 1
}
noDupe
还有一个 if 语句,仅当它还没有该值时才尝试将值插入:
noDupe=()
values=("test" "test" "test2")
for value in ${values[@]}; do
if [ $(inArray "${value}" "${values[@]}") -eq 1 ]; then
noDupe+="{value}"
fi
done
我当前的错误是-eq
需要一元运算符。我尝试将其更改为 a==
但这仅适用于字符串,而不是我的函数返回的0
s 和s。1
如何使 if 语句起作用?
解决方案
您的函数正在使用返回值,但是如果打印了返回值,您将尝试使用它。“如果退出状态非零”的正确用法简化为
if ! inArray "${value}" "${values[@]}"; then
旁注:您得到的错误不是-eq
需要一元运算符,而是
bash: [: -eq: unary operator expected
这意味着[
需要一个一元运算符,但它却得到了-eq
一个二元运算符。这是因为您的命令替换没有被引用,并且当命令没有返回任何内容时,您的测试变为
[ -eq 1 ]
通过适当的引用,
[ "$(inArray "${value}" "${values[@]}")" -eq 1 ]
测试会抱怨它需要一个整数表达式(但得到的是空字符串),因为它扩展为
[ "" -eq 1 ]
推荐阅读
- javascript - 如何更改 eslint 设置以了解绝对导入?
- security - TransformerConfigurationException:无法为 Transformer 设置功能
- c++ - c++程序在运行时停止工作
- php - 保险丝安装的存储桶显示 403 禁止错误
- c++ - C++中的退出选项和while循环
- mysql - 如何根据属性名称过滤 mysql 中的 JSON 数据类型?
- javascript - 如何在 React Native 中添加支付网关集成?
- linux - Linux 日志服务器权限被拒绝
- javascript - 创建异步多级向下钻取 - Highcharts
- java - 无法解析符号“content_frame”