如何检查数组元素是否是 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
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