簡體   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