为什么zsh参数扩展${1-$PWD}中有一个数字

为什么zsh参数扩展${1-$PWD}中有一个数字

我有一个基于我当前脚本的脚本。我只是不明白他为什么会typeset result part dir=${1-$PWD}在那里。

如果我只写 ,我会得到相同的结果dir=$PWD。排版正在${1-$PWD}改变如何dir设置与$PWD

答案1

这不是大括号扩展,而是标准参数扩展运算符(可以追溯到 70 年代的 Bourne shell)。

${1-$PWD}

$1如果设置(如果$#严格大于 0),则扩展为(第一个位置参数)的值,甚至扩展为空字符串,$PWD否则扩展为变量的内容。

跑步:

info zsh 'Parameter Expansion'

了解详情。

typeset不是 Bourne 也不是 POSIX,但它也不是zsh特定的。它来自 Korn shell(80 年代初),用于将变量的范围限制为当前函数。它也出现在bash和中yash

跑步:

info zsh typeset

了解详情。

答案2

${1-$PWD}是一种 shell 参数扩展模式。

它用于扩展为基于另一个的默认值 - 无论 右侧的任何值-。在这里,就你的情况而言:

  • 如果$1未设置,则 的扩展$PWD将被替换

  • 否则,即如果$1设置为任何值(包括 null),其值将用作扩展的结果

例子:

% echo "Foo${1-$PWD}"   
Foo/home/bar

% set -- Spam

% echo "Foo${1-$PWD}"
FooSpam

答案3

它使用 before 测试$1一个值$PWD

相关内容