BASH Wild-card:选择所有变量(不是内容)

时间:2011-05-12 10:12:42

标签: bash shell

我想要检查一堆变量,如果它们包含值“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本身..?

3 个答案:

答案 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支持产生类似

的输出的envprintenv
 var=value

export命令(不带参数)将列出环境中的所有导出变量。

for varAndVal in $( env ) ; do
   case ${varAndVal} in
     *=none ) 
      eval \$${varAndVal}=
      #OR eval unset \$${varAndVal}
     ;;
    esac
 done

我希望这会有所帮助。

P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。