${BASH_SOURCE[0]}
相当的 Zsh 等效命令。注意:我在互联网上一直发现“
$0
等同于 ${BASH_SOURCE[0]}
”,但这似乎是错误的:$0
似乎是正在执行的命令的名称。(它是 argv[0]
,这很有道理。)在我的脚本(.zshrc
)中回显 $0 给出 zsh
,这与 ${BASH_SOURCE[0]}
不同。实际上,${BASH_SOURCE[0]}
在 zsh
中运行得很好,除了在 .zshrc
文件内部。我在我的
.zshrc
中真正要做的事情(但无法正常工作):echo ${BASH_SOURCE[0]}
source `dirname $0`/common-shell-rc.sh
源代码失败($0
为 zsh
),echo
输出空白行。
编辑: 显然,要让 $0
正常工作,我需要设置 FUNCTION_ARGZERO
选项。有没有方法在脚本中测试是否设置了此选项?(这样我就可以暂时设置它)除非你设置了 nofunction_argzero
,否则它似乎默认是打开的,并且在我的 shell 中也是打开的。但是对于 $0
,仍然没有输出。(我想是因为我不在函数中。)
$BASH_SOURCE
等效项是%x
,而不是%N
,因为它在函数内部调用时仍引用封闭的 文件 - 换句话说:请使用${(%):-%x}
- mklement0:-
,以及为什么${(%)%N}
不会起到同样的作用(注意:我知道它不起作用)。 - PierreBdRreadlink
解析为绝对路径:readlink -f ${(%):-%N}
。 - Bryce Guinta${(%)%N}
类似于${%N}
,但受到了 (%) 标志的影响。${%N}
将尝试展开一个空字符串名称的变量(这不是真实存在的东西,但总是成功地展开为空),并删除一个尾随的 N。使用${(%):-%N}
尝试展开相同的空字符串变量,然后由于它是空的,使用%N
作为默认值... 然后由于 (%) 标志的缘故,就像提示一样展开。 - Jonathan Klabunde Tomer${${(%):-%x}:A:h}
。 - basicdays