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