我有一个基于我当前脚本的脚本。我只是不明白他为什么会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
。