我们应该使用 UTF-8 字符吗?在 bash/shell 脚本中?

bob*_*lan 36 shell bash unicode

如果使用bash以下命令启动,这里的简单代码在我的机器上按预期工作:

function ?(){
 date
}
?
Run Code Online (Sandbox Code Playgroud)

其他人使用它会不会有问题,还是普遍存在?

我想知道,因为我现在从未在其他源代码中看到过这样的东西。

编辑:有无限的可能性,例如可以通过使用表情符号来快速区分功能角色。

一个可以修改或删除文件的东西,一个正在进行的工作,一个交互式菜单......

我想我们应该为所有这些制定一个标准,但这似乎是一个有趣的想法。
也许大约 5 个字符的随机行可以帮助我们很好地理解代码在做什么。(当然,我们需要学习如何阅读它们。)

更多编辑:我试一试。现在,如果我在编辑器 (Or cat myscript.sh|grep function) 中折叠所有函数,它们看起来像这样。(geany与此处相比,我的 unicode 在或我的终端中看起来要好得多。)

function ?_1(){
function ??_2(){
function ???__D(){
function ????__X(){
function ?????__Y(){
function ??????_?_P(){
function ????__Z(){
function ?????_?_U(){
function ?????_?_O(){
Run Code Online (Sandbox Code Playgroud)

我使用了奇怪的缩进?显示函数是如何相互关联的,一个符号 /? 明确区分它们的作用。(当然这些不是我真正的函数名,我只是在最后放了一个随机字母,但即使没有它们我们也可以清楚地看到它们之间的关系。)

n.s*_*.st 55

一个有用的指南是“便携式操作系统接口”(POSIX),这是大多数类 Unix 系统实现的一系列标准。将 shell 脚本限制为 POSIX 规定的功能通常是一个好主意,以确保它们可以跨不同的 shell 和平台使用。

根据“Shell Command Language”函数定义的POSIX规范:

该函数名为 fname;应用程序应确保它是一个名称(参见 IEEE Std 1003.1-2001 的基本定义卷,第 3.230 节,名称)。实现可能允许函数名称中的其他字符作为扩展名。

按照“名称”定义的链接:

在 shell 命令语言中,一个仅由下划线、数字和来自可移植字符集的字母组成的单词。

该字符集仅包含 U0000 和 U007E 之间的字符。
因此像“?”这样的字符 (U23F0) 在符合 POSIX 的标识符中无效。

您的shell 可能会接受它们,但这并不能保证其他人也会接受。
为了能够跨不同平台和软件版本使用您的脚本,您应该避免使用这样的不合规标识符。

  • 良好的经验法则...如果您的标准键盘没有键...请不要使用它。 (18认同)
  • @Jorn 也许我应该说“如果您无法从普通零售店购买键盘”...大声笑 (9认同)
  • @SnakeDoc https://www.youtube.com/watch?v=3AtBE9BOvvk“标准”表情符号键盘;) (6认同)
  • @SnakeDoc 这是一个好的开始 - 但我正在输入的键盘有一个用于 £、€ 和 ¬ 的键,所有这些都在可移植字符集之外。更严重的是,一些同事的键盘上带有 ä、ö、ü、è、é 和 ß。它们都是字母,但不适用于可移植的函数名称。 (4认同)
  • 符合 POSIX 但不受 POSIX 限制? (2认同)