相关疑难解决方法(0)

Shell 有效函数名字符

使用扩展的 Unicode 字符(毫无疑问)对许多用户很有用。

更简单的 shell(ash(busybox)、dash)和 ksh 会失败:

tést() { echo 34; }

tést
Run Code Online (Sandbox Code Playgroud)

但是似乎允许它。

我知道 POSIX有效函数名称使用Names 的这个定义。这意味着这个正则表达式:

[a-zA-Z_][a-zA-Z0-9_]*
Run Code Online (Sandbox Code Playgroud)

但是,在第一个链接中还说:

实现可能允许函数名称中的其他字符作为扩展名。

问题是:

  • 这是否被接受并记录在案?
  • 在哪里?
  • 对于哪些壳(如果有)?

相关问题:是否
可以在 shell 函数名称中使用特殊字符?
我对在函数名称中使用元字符 (>) 不感兴趣。

包含“-”的 Upstart 和 bash 函数名称
我不认为运算符(减法“-”)应该是名称的一部分。

shell bash zsh function

14
推荐指数
2
解决办法
8522
查看次数

%% 在函数名中是什么意思?

查看 的输出env,我注意到还有以下函数。

BASH_FUNC_mc%%=() {  . /usr/share/mc/mc-wrapper.sh
}
Run Code Online (Sandbox Code Playgroud)

/usr/share/mc/mc-wrapper.sh 文件的内容如下。

MC_USER=`id | sed 's/[^(]*(//;s/).*//'`
MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"

if test -r "$MC_PWD_FILE"; then
        MC_PWD="`cat "$MC_PWD_FILE"`"
        if test -n "$MC_PWD" && test -d "$MC_PWD"; then
                cd "$MC_PWD"
        fi
        unset MC_PWD
fi

rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE
Run Code Online (Sandbox Code Playgroud)

%%函数名中的字符是什么意思?它们是在特定情况下调用的函数,还是允许我以与其他函数不同的方式调用它?

我正在使用 openSUSE 42.3 和 Bash 版本 4.3.42(1)-release (x86_64-suse-linux-gnu),如果这有什么不同的话。

bash shell-script environment-variables function

11
推荐指数
1
解决办法
3276
查看次数