int*_*ted 12 git bash bash-completion
git bash完成的代码,特别是函数__gitcomp,使用参数扩展,如"${1-}".这似乎与此类似"$1".有什么不同?
另外:bash手册中记录了哪些内容?
Gil*_*il' 15
首先,回想一下,${foo-bar}扩展到的值foo,$foo或者${foo},除了if foo未设置,${foo-bar}扩展为bar($foo如果foo未设置则扩展为空字符串).这种语法有一种更常用的变体${foo:-bar},它扩展为barif foo未设置或为空.(如果你仔细观察,这在手册中有解释:搜索:-并注意句子"省略冒号导致仅针对未设置的参数进行测试.".)
对于位置参数$1,${1-bar}展开为barif $1未设置,即,如果位置参数的数量小于1.除非使用set或更改位置参数shift,这意味着当前函数,或者如果不适用当前脚本,没有参数.
现在当它bar是空的时,${1-}看起来像一个无用的复杂化:扩展是那个$1,除了当$1未设置时,扩展是空的,无论如何它都是.使用的重点${1-}是,在set -u(又名set -o nounset)下,$1如果参数未设置,则plain 会导致错误,而如果未设置则${1-}总是成功扩展为空字符串$1.
echo "${foo-default}"
Run Code Online (Sandbox Code Playgroud)
如果 foo 已定义,则打印 $foo;如果 foo 未定义,则打印 'default'。所以我得出结论
"${1-}"
Run Code Online (Sandbox Code Playgroud)
如果脚本的第一个参数未定义,则为空。