[英]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 arg1
和arg2
运行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.