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

How to check if array element is substring of string in Bash

This问题没有回答我的问题。

我有一个脚本可以检查特定环境变量是否存在并打印它们及其值。现在我想用 ****.

目前我有这样的脚本:

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

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

测试的操作数是否属于数组并不重要。一般形式为

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

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

您可以将此脚本与 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 '%s\n' "${suppress_env_vars_with_substring[@]}") <<< "$env_var" &&
    echo '****' || echo "${!env_var}"
  fi
done