linux - path永久生效 - 修改export




Linux環境變量名稱中允許的字符 (4)

Linux環境變量名稱中允許使用哪些字符? 我粗略搜索手冊頁和網頁只能提供有關如何使用變量的信息,但不能提供哪些名稱。

我有一個Java程序需要一個包含點的定義環境變量,比如com.example.fancyproperty 。 在Windows中,我可以設置該變量,但我沒有在Linux中設置它(在SuSE和Ubuntu中嘗試過)。 這個變量名稱是否允許?


IEEE Std 1003.1-2008 / IEEE POSIX P1003.2 / ISO 9945.2 Shell和Tools標準的Shell部分上的POSIX標準沒有定義變量名稱的詞彙約定,但粗略look at the source發現它使用類似於

[a-zA-Z_]+[a-zA-Z0-9_]*

(編輯:在第二個字符類中添加缺少的下劃線。)

快速注意一下,因為有些shell不支持正則表達式中的+,可能更便攜的正則表達式可能是:

[a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}


來自公開組

這些字符串的形式為name = value; 名稱不得包含字符'='。 對於符合IEEE Std 1003.1-2001標準的系統可移植的值,該值應由便攜式字符集中的字符( NUL除外,如下所示 )組成。

所以名字可以包含除了=和NUL之外的任何字符,但是:

IEEE Std 1003.1-2001的Shell和Utilities卷中的實用程序使用的環境變量名僅由大寫字母,數字和便攜式字符集中定義的字符中的'_'(下劃線)組成, 並且不以數字開頭 。 其他角色可能會被執行所允許; 應用程序應該容忍這些名稱的存在。

因此,儘管名稱可能有效,但您的shell可能不支持除字母,數字和下劃線之外的任何內容。


我的快速測試表明,它們基本上遵循與C變量名稱相同的規則,即

  1. az,AZ, _和0-9
  2. 不能以數字開頭

所以這個排除在外. 在他們裡面。 任何非法變量名稱都記入unknown command

這在ZSH中進行了測試,主要與BASH兼容。


這取決於外殼。 我猜你默認使用bash,在這種情況下,字母,數字和下劃線是允許的,但是你不能用數字來啟動變量名。 從Bash v.3開始, 變量名稱中不允許使用句點







environment-variables