3 回答

TA貢獻1784條經驗 獲得超2個贊
來自公開組:
這些字符串的格式為name = value; 名稱不得包含字符'='。對于可在符合IEEE Std 1003.1-2001的系統中移植的值,該值應由便攜式字符集中的字符組成(NUL除外,如下所示)。
所以名稱可以包含除=和NUL之外的任何字符,但是:
IEEE Std 1003.1-2001的Shell和Utilities卷中的實用程序使用的環境變量名稱僅由大寫字母,數字和便攜式字符集中定義的字符的“_”(下劃線)組成,并且不以數字開頭。實現可以允許其他字符; 申請應容忍此類名稱的存在。
因此,盡管名稱可能有效,但您的shell可能不支持除字母,數字和下劃線之外的任何內容。

TA貢獻2080條經驗 獲得超4個贊
上殼部分的POSIX標準 IEEE標準1003.1-2008 / IEEE POSIX P1003.2 / ISO 9945.2 殼牌和工具標準沒有定義的變量名詞法約定,但粗略 看看源揭示它使用類似的東西
[a-zA-Z_]+[a-zA-Z0-9_]*
(編輯:在第二個字符類中添加了缺少的下劃線。)
快速說明,因為有些shell不支持正則表達式中的+,可能更具可移植性的正則表達式可能是:
[a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}

TA貢獻1796條經驗 獲得超10個贊
我的快速測試顯示它們基本上遵循與C變量名稱相同的規則,即
az,AZ
_
和0-9不能以數字開頭
所以這不包括.
在他們內心。任何非法變量名稱都被記入unknown command
。
這是在ZSH中測試的,ZSH主要與BASH兼容。
- 3 回答
- 0 關注
- 1293 瀏覽
添加回答
舉報