【发布时间】:2015-06-19 10:58:51
【问题描述】:
如果我定义一个接受参数的 bash(或任何其他 shell)函数,但在调用它时不传递参数,会发生什么?是否保证默认传递空字符串?
function test() {
echo $1
}
test
【问题讨论】:
标签: bash
如果我定义一个接受参数的 bash(或任何其他 shell)函数,但在调用它时不传递参数,会发生什么?是否保证默认传递空字符串?
function test() {
echo $1
}
test
【问题讨论】:
标签: bash
查看http://tldp.org/LDP/abs/html/othertypesv.html#EX17
如果脚本需要命令行参数,但在没有命令行参数的情况下调用,这可能会导致空变量赋值,通常是不希望的结果。防止这种情况的一种方法是使用预期的位置参数在赋值语句的两侧附加一个额外的字符。
【讨论】:
${N} 简称,但后来我在文档中找到了上述语句。似乎是您问题的正确答案。
[ -n "${N}" ] 这样的用法被认为是安全的,至少在 bash 中是这样。因为[ 和[[ 是bash 内置的,所以行为应该是一致的和可移植的。
在这种情况下,$1 是 unset。未使用的位置参数默认为unset,与设置为null 略有不同。如果你写了foo="",那么$foo 就是null。
其中一个区别是,如果您设置了nounset shell 属性 (set -o nounset),则引用 unset 参数将导致错误。
更多信息:
【讨论】: