arrays - Bash - 如何检查变量值是否在数组中
问题描述
我有一个包含 6 个值的数组,然后我有另外三个数组,其值介于 4 到 1 之间。我想遍历数组 1 并检查数组 1 中的值是否出现在数组 2、数组 3 和数组 4 中。目前我有以下内容,但它似乎只检查数组 1 中的值与数组 2,3 中的第一个值和4. 我省略了数组 3 和 4,但它们将具有与数组 2 相同的 for 循环,并且位于数组 1 的循环内。
array1=("value1" "value2" "value3" "value4" "value5" "value6")
for i in "${array1}"; do
array2= ("value1" "value3" "value4" "value5")
for f in "${array2}; do
if [[ ${i} == ${f} ]]; then
echo "${i} in array1 matches ${f} in array2"
else
echo "${i} in array1 does not match any value in array2"
fi
done
done
解决方案
我认为最好的办法是做一个函数
in_array () {
search=$1
shift # remove first argument from list of args $@
for val; do # equivalent to `for val in "$@"`
if [[ $search = $val ]]; then
return # returns exit code of the successful [[ test ]], 0
fi
done
return 1
}
如果找到该值,则返回0
,否则1
,允许您像这样使用它:
array1=("value1" "value2" "value3" "value4" "value5" "value6")
array2=("value1" "value3" "value4" "value5")
for i in "${array1[@]}"; do
if in_array "$i" "${array2[@]}"; then
echo "$i in array1 is in array2"
fi
done
请注意,要遍历数组的所有值,正确的扩展是"${array[@]}"
(使用双引号和[@]
)。
推荐阅读
- iframe - Spotify 嵌入 iframe 未在 IE11 中加载
- python - Google Play 控制台 API 返回“收到的 JSON 负载无效。\'track_config\' 中的未知名称“versionCodes”:找不到字段。
- c# - 在 Azure Web App(.NET Framework 4.7)上发布后,“SpeechSynthesizer”不起作用
- javascript - 嵌套在每个不在 javascript 中工作的函数
- html - 如何添加数据掩码并且不使用 npm
- user-interface - 某些 PyQt5 复选框在移动后无法点击
- c# - C# REST API - 以 JSON 形式返回数组
- css - 让 Antd 3.x Tree 看起来像 TreeTable
- windows - WEC:如何唯一标识“转发事件”通道中的日志
- javascript - 当密码包含数字时,bcryptjs 比较函数返回 false