繁体   English   中英

Bash:如何取消设置带有连字符 (-) 的环境变量?

[英]Bash: how to unset an env variable with a hyphen (-)?

我的环境中有一些标识符无效的变量。 当我尝试取消设置它们时,出现以下错误:

$ unset A-B
bash: unset: `A-B': not a valid identifier

如何解除它们?

Honza P的回答相关:

根据man bash ,环境变量的形式name=value ,其中name仅由字母数字字符和下划线组成,并以字母字符或下划线开头。 因此名称AB是 Bash 的无效变量标识符,不能使用或访问,因为它具有内部验证(由于 Bash 本身存在漏洞,在 Bash 后期版本中强制执行)。 唯一的解决方案是启动另一个没有违规名称的辅助子 shell,在启动 Bash 之前使用实用程序env擦除它们:

env -u 'A-B' bash

请注意,单引号不是必需的,但对我而言,这种方式更具可读性,因为表明里面的文本是一个字符串,而不是其他命令。

如果您有更多变量,只需将它们以空格分隔列出,或者如果您只想运行一个没有变量的脚本,您可以使用例如:

env -u 'A-B' 'OTHER-VAR' 'bad-name' bash -c 'myscript.sh arg1 arg2'

子 shell 将使用 arguments arg1arg2运行myscript.sh ,并退出到当前 Bash shell。

查阅'env'的手册页: man env

我猜这不是最好的解决方案,但对我而言有效。

我通过bishop env -u "foo-bar=baz"尝试了一个示例,然后通过env -u "foo-bar"尝试,但是这种方法仍然在变量中留下一些垃圾,例如_=foo-bar 因此我使用了未unset _ ,然后它消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM