zsh
下面的示例说明了我将脚本视为“日常WTF”的情况。我几乎放弃了zsh
充分理解大量规则的希望,以便能够自己解决这些令人困惑的案例,但我仍然希望找到一些设置、技术、工具或技巧,能够帮助我解决问题。至少帮我剖析发生了什么。本质上类似于使用调试器单步执行某些代码,或者查看其执行的痕迹。
我认为这${(%):-%x}
只是 的一种可爱的简写${(%)NONEXISTENT:-%x}
,其中NONEXISTENT
代表当前环境中未定义的任何标识符。事实上,看起来这是真的:
# /tmp/test
echo "${(%)NONEXISTENT:-%x}"
echo "${(%):-%x}"
结果:
% zsh /tmp/test
/tmp/test
/tmp/test
因此,出于同样的原因,我认为这${(%)-%x}
只是 的一个可爱的简写${(%)NONEXISTENT-%x}
。
正如你现在可能预料到的那样,我错了。下面的脚本显示了这一点,该脚本只是用几行扩展了前面显示的脚本:
# /tmp/test
echo "${(%)NONEXISTENT:-%x}"
echo "${(%):-%x}"
echo "${(%)NONEXISTENT-%x}"
echo "${(%)-%x}"
结果:
% zsh /tmp/test
/tmp/test
/tmp/test
/tmp/test
569X
更神秘的是,详细信息取决于脚本是否运行或来源:
% source /tmp/test
/tmp/test
/tmp/test
/tmp/test
5679BJTVXgim