Zer*_*ase 6 shell zsh variable-substitution
我有这个脚本,我基于我当前的脚本。我只是不明白他为什么会typeset result part dir=${1-$PWD}在那里。
如果我只是写,我会得到相同的结果dir=$PWD。随着排版正在${1-$PWD}改变如何dir设置 vs $PWD?
这不是大括号扩展,而是一个标准的参数扩展运算符(可以追溯到 70 年代的 Bourne shell)。
${1-$PWD}
Run Code Online (Sandbox Code Playgroud)
$1如果它被设置(如果$#严格大于 0)甚至是空字符串,则扩展到(第一个位置参数)的值,否则扩展到$PWD变量的内容。
跑:
info zsh 'Parameter Expansion'
Run Code Online (Sandbox Code Playgroud)
详情。
typeset既不是 Bourne 也不是 POSIX,但也不是zsh特定的。它来自 Korn shell(来自 80 年代早期),用于将变量的范围限制为当前函数。它也可以在bash和 中找到yash。
跑:
info zsh typeset
Run Code Online (Sandbox Code Playgroud)
详情。
${1-$PWD} 是一种shell参数扩展模式。
它用于扩展到基于另一个的默认值 - 无论在-. 在这里,在你的情况下:
如果$1未设置,则 的扩展$PWD将被替换
否则即如果$1设置为任何值(包括空值),其值将用作扩展的结果
例子:
% echo "Foo${1-$PWD}"
Foo/home/bar
% set -- Spam
% echo "Foo${1-$PWD}"
FooSpam
Run Code Online (Sandbox Code Playgroud)