Bash样式:用条件定义的缩进函数?

时间:2016-06-21 19:37:15

标签: bash indentation

如果有一个条件控件定义了一个函数版本(而不是在函数中有条件)

是否有通用的协议天气,功能应该缩进?

if whatever; then
function myfunc() {
  echo "impl 1"
}
else
function myfunc() {
  echo "impl 2"
}
fi

VS

if whatever; then
  function myfunc() {
    echo "impl 1"
  }
else
  function myfunc() {
    echo "impl 2"
  }
fi

(只回答缩进问题而不是使用关键字功能,括号位置等)

1 个答案:

答案 0 :(得分:1)

作为意见:是的,缩进它。

作为一个更客观的陈述(以及我更自称的声称是普遍意见的陈述):使用与条件体中任何其他陈述一样的缩进(或缺少)。也就是说,写

if whatever; then
  function foo {
    ...
  }
fi

if whatever; then
  foo=3
fi

if whatever; then
function foo {
    ...
}
fi

if whatever; then
foo=3
fi

这个的基本原理是除了语法之外,函数定义只是一个赋值。它不是将字符串赋值给参数名,而是绑定复合命令。事实上,即使在发现ShellShock漏洞之后所做的更改之后,仍然可以通过环境变量动态定义bash中的函数(模仿bash本身导出定义正常的函数的方式方式):

$ env "BASH_FUNC_foo%%=() { echo 1; }" bash
$ foo
1

因此,就缩进而言,几乎没有理由以不同于任何其他转让声明的方式对待它。