我想要检查一堆变量,如果它们包含值“None”,那么我想清空它们。
var1=(check for some value, sometimes it returns "none")
var2=(check for some value, sometimes it returns "none")
var3=(check for some value, sometimes it returns "none")
someBizzareName=(check for some value, sometimes it returns "none")
if [[ "${var1}" == "None" ]] ; then
var1=""
fi
if [[ "${var2}" == "None" ]] ; then
var2=""
fi
这一切都很好,花花公子,只是因为我有很多的varN,我最终会得到大量的if [[ "${varN}" == "None" ]]
和我必须知道他们的名字;所以我很想知道,因为BASH非常适合搜索和匹配所有内容,如果有变量的外卡,在for循环中,那将匹配所有 vars,像${*}
(我试过,不起作用)?我已经完成了各种搜索,但总能找到匹配变量内容的内容,而不是var本身..?
答案 0 :(得分:6)
全部,没有。但是你可以匹配一个模式(但不是*
)。
$ echo "${!B*}"
BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION
答案 1 :(得分:2)
你也可以使用内置的compgen:
man bash | less -p 'compgen .option. .word.'
compgen -A variable B
答案 2 :(得分:1)
全部,是的; - )
大多数Unix / Linux支持产生类似
的输出的env
或printenv
var=value
export
命令(不带参数)将列出环境中的所有导出变量。
for varAndVal in $( env ) ; do
case ${varAndVal} in
*=none )
eval \$${varAndVal}=
#OR eval unset \$${varAndVal}
;;
esac
done
我希望这会有所帮助。
P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。