nev*_*ves 5 bash environment-variables
我的环境中有一些变量具有无效标识符。当我尝试取消它们时,出现以下错误:
$ unset A-B
bash: unset: `A-B': not a valid identifier
Run Code Online (Sandbox Code Playgroud)
如何取消它们?
与Honza P的回答相关:
根据man bash环境变量的形式name=value,其中name仅包含字母数字字符和下划线,并以字母字符或下划线开头。因此,该名称A-B对于 Bash 来说是无效的变量标识符,并且无法使用或访问,因为它具有内部验证(由于 Bash 本身的漏洞,在最新的 Bash 版本中强制执行)。唯一的解决方案是启动另一个没有违规名称的辅助子 shell,env在启动 Bash 之前使用实用程序删除它们:
env -u 'A-B' bash
Run Code Online (Sandbox Code Playgroud)
请注意,不需要单引号,但对我来说,这种方式更具可读性,因为表明里面的文本是字符串,而不是其他命令。
如果您有更多变量,只需将它们以空格分隔列出,或者如果您只想运行没有变量的脚本,您可以使用例如:
env -u 'A-B' 'OTHER-VAR' 'bad-name' bash -c 'myscript.sh arg1 arg2'
Run Code Online (Sandbox Code Playgroud)
子 shell 将使用myscript.sh参数arg1和运行arg2,并退出到当前的 Bash shell。
请参阅“env”的手册页:man env