[英]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.