技术与生活 / 一篇记录
Shell 函数的参数边界要明确
函数把重复步骤集中起来,但如果内部偷偷读取和修改全局变量,调用者仍然很难预测结果。先明确参数、标准输出与退出码,封装才真正具有价值。
函数应接收明确参数并返回稳定结果,避免依赖太多全局变量。
实际怎么检查
以下示例使用 Bash,请在独立测试目录中理解输入、输出和退出码。
greet() { printf 'hello %s\n' "$1"; }; greet reader
调用两次并更换参数,确认没有依赖上一次状态。
遇到异常再检查什么
连续调用函数并传入不同值,观察前一次状态是否影响后一次。函数如果要改变目录或环境变量,应在接口说明中写清,或放入子 Shell 隔离。
函数输出也属于接口。若调用者使用命令替换接收结果,函数中的额外调试输出会一起被接收。把诊断写到标准错误,能让结果保持稳定,减少调用方脆弱的字符串清理。
函数内部的 cd 会影响当前 Shell,应明确目录边界。
参考:Shell 文档。