进行了一些代码重构,我意识到我不知道这是否重要:
函数定义将来自另一个文件(一种库)。该函数使用函数体内的某些变量。这些变量将在函数实际运行时设置被称为在脚本中,但如果我可以在开始脚本的;但是此时变量尚未定义。
这样做有什么坏处吗?据我所知 bash 实际上不会对函数定义做任何事情直到它被调用......对吗?在这种情况下,函数中使用的未设置变量并不重要,因为这些变量将在函数实际运行之前包含正确的值。被称为。
或者在函数定义中包含迄今为止未设置的变量会搞砸事情吗?
答案1
fn(){ printf %s\\n "${v-not set}"; }
v=value; fn; unset v; fn
value
not set
shell 函数是存储在 shell 内存中的文字字符串。在定义时它被解析,但不评估扩展(除了 shell 别名)或重定向。这些仅在以下时间进行评估称呼时间。
事实上,并且有些相关的是,通过这种方式,可以让函数在每次调用时使用新的临时文件定义自己的输入。
fn(){ ls -l /dev/fd/0; cat; } <<INFILE
$@
INFILE
fn some args; fn other args
#in dash
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:50 /dev/fd/0 -> pipe:[4076148]
some args
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:50 /dev/fd/0 -> pipe:[4077081]
other args
#bash
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:51 /dev/fd/0 -> /tmp/sh-thd-1036060995 (deleted)
some args
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:51 /dev/fd/0 -> /tmp/sh-thd-531856742 (deleted)
other args