我想:
取消设置myvarname *
其中myvarname是一个字符串而*是......好吧,你得到了它。
尝试
env | grep string |未固化
但不起作用。
我进入了一个脚本,我不想启动一个新的shell,所以没有env -i或者源代码或者重新进入shell
请帮助一个可怜的菜鸟
提前致谢
答案 0 :(得分:8)
在Bash shell中,${!prefix@}
参数扩展会生成所有以prefix
开头的变量。
${!prefix@}
扩展为名称以前缀开头的变量的名称 [...]当使用@且扩展出现在双倍内时 用引号引起来,每个变量名都会扩展为一个单独的单词。
此列表然后可以传递给unset
:
unset "${!myvarname@}"
答案 1 :(得分:5)
如果是bash
shell,请执行:
unset $(compgen -v myvarname)
例如,显示当前环境中以字母“ S ”开头的所有变量:
unset $(compgen -v S)
输出:
SAL_USE_VCLPLUGIN
SCREEN_NO
SECONDS
SESSION
SESSIONTYPE
SHELL
SHELLOPTS
SHLVL
SSH_AUTH_SOCK
如果它是 POSIX shell,请尝试更通用的内容:
unset $(env | sed -n 's/^\(S.*\)=.*/\1/p')
或者如果 GNU grep
可用:
unset $(env | grep -o '^S[^=]*')
答案 2 :(得分:4)
试试这个 -
unset $(env | grep string |awk -F'=' '{print $1}')
假设我有像 -
这样的环境变量printenv
string1=hello
string2=vipin
当您使用字符串grep进行搜索时,将获取这两个环境并获取环境变量的名称并传递给unset命令。