如何在Bash中检查数组元素是否是字符串的子字符串



这个问题没有回答我的问题。

我有一个脚本,检查特定环境变量的存在,并打印它们的值。现在我想用****来屏蔽密码变量(名称中包含SECRET,PW,PASSWORD,KEY,例如CLIENT_SECRET)的值。

目前我有一个这样的脚本:

expected_env_vars=("CLIENT_ID" "CLIENT_SECRET" "BACKEND_KEY" "BACKEND_NAME")
suppress_env_vars_with_substring=("SECRET" "PASSWORD" "PW" "KEY")
for env_var in "${expected_env_vars[@]}"; do
if [[ -z "${!env_var}" ]]; then
echo "Environment variable "$env_var" not defined"
exit 1
else
# Perform check if an element of $suppress_env_vars_with_substring is substring of $env_var
echo "$env_var=${!env_var}...OK"
fi
done


如何检查数组元素是否是字符串的子字符串?

您可以将此脚本用于grep:

expected_env_vars=("CLIENT_ID" "CLIENT_SECRET" "BACKEND_KEY" "BACKEND_NAME")
suppress_env_vars_with_substring=("SECRET" "PASSWORD" "PW" "KEY")
for env_var in "${expected_env_vars[@]}"; do
if [[ -z "${!env_var}" ]]; then
echo "Environment variable "$env_var" not defined"
exit 1
else
# Perform check if an element of $suppress_env_vars_with_substring is substring of $env_var
printf '%s=' "$env_var"
grep -qFf <(printf '%sn' "${suppress_env_vars_with_substring[@]}") <<< "$env_var" &&
echo '****' || echo "${!env_var}"
fi
done

要测试的操作数是否属于数组无关紧要。一般形式为

[[ $x == *$y* ]] && echo "$y is a substring of $x"

您可以替换$x$y以及您喜欢的参数扩展,包括数组元素。

相关内容

  • 没有找到相关文章

最新更新