Bash 已使用函数参数,但未传递

Bash 已使用函数参数,但未传递,bash,Bash,如果我定义一个接受参数的bash(或任何其他shell)函数,但在调用它时不传递参数,会发生什么?默认情况下是否保证传递空字符串 function test() { echo $1 } test 检查这个 如果脚本需要一个命令行参数,但在没有命令行参数的情况下被调用,这可能会导致null变量赋值,这通常是一个不理想的结果。防止这种情况的一种方法是使用预期的位置参数在赋值语句的两侧追加一个额外字符 在这种情况下,$1是unset。默认情况下,未使用的位置参数是unset,这与设置为null

如果我定义一个接受参数的bash(或任何其他shell)函数,但在调用它时不传递参数,会发生什么?默认情况下是否保证传递空字符串

function test() {
  echo $1
}
test 
检查这个

如果脚本需要一个命令行参数,但在没有命令行参数的情况下被调用,这可能会导致null变量赋值,这通常是一个不理想的结果。防止这种情况的一种方法是使用预期的位置参数在赋值语句的两侧追加一个额外字符


在这种情况下,
$1
unset
。默认情况下,未使用的位置参数是
unset
,这与设置为
null
略有不同。如果您编写了
foo=”“
,则
$foo
将为
null

其中一个区别是,如果有
nounset
shell属性集(
set-o nounset
),则引用
unset
参数将导致错误

有关更多信息:


Hihi:)我在bash中处理的参数从未超过9个。我将其编辑为
${N}
,但随后我在文档中找到了上述语句。似乎是您问题的正确答案。答案是“是”,与使用任何其他未赋值变量扩展为空字符串的方式相同。这句话是在讨论一个特定的“错误”,这个错误可能会因缺少参数而发生,对于这个问题来说是一个特别糟糕的“解决方案”(最后的“然而”注释要好得多)。@EtanReisner你说得对。我现在不能删除这个答案,因为它已经被接受了——我已经好几年没有看到那个“高级”指南了。:-)注意,它忽略了许多“最佳实践”,比如引用变量和验证输入。现在,像
[-n“${n}”]
这样的用法被认为是安全的,至少在bash中是如此。因为
[
[[
是bash内置的,所以行为应该是一致的和可移植的。