在bash中有效但在sh中无效的函数名称

12 浏览
0 Comments

在bash中有效但在sh中无效的函数名称

在尝试使用bash和sh时,我发现在bash中以下代码是有效的:

system.out.println () { printf "$1"; }

但是在sh中无效:

sh: `system.out.println': not a valid identifier

为什么会有这种差异?上述定义的函数是否违反了某些约定(如POSIX等),导致了这个错误?

0
0 Comments

在bash中可以使用的函数名,在sh中却无法使用。这个问题的根本原因是在shell中不能使用点号作为函数名的一部分,实际上也不能在变量名中使用点号。POSIX shell规范要求函数名只能由下划线和字母数字字符组成。

解决这个问题的方法是使用合法的函数名,即只使用下划线和字母数字字符作为函数名的组成部分。以下是一个例子:

# 合法的函数名
my_function() {
    echo "This is a valid function name in bash."
}

然而,在sh中,使用点号作为函数名的一部分是非法的。以下是一个在sh中无法运行的例子:

# 非法的函数名
my.function() {
    echo "This is an invalid function name in sh."
}

要解决这个问题,我们需要修改函数名,以符合sh的规范。以下是一个在sh中可以运行的例子:

# 合法的函数名
my_function() {
    echo "This is a valid function name in sh."
}

总之,要在sh中使用合法的函数名,我们需要确保函数名只由下划线和字母数字字符组成,而不能包含点号。这样才能确保脚本在不同的shell环境中都能正常运行。

0