如果有一个条件控件定义了一个函数版本(而不是在函数中有条件)
是否有通用的协议天气,功能应该缩进?
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
(只回答缩进问题而不是使用关键字功能,括号位置等)
答案 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
因此,就缩进而言,几乎没有理由以不同于任何其他转让声明的方式对待它。