hum*_*ace 9 bash environment-variables function shellshock
bash 中的shellshock错误通过环境变量起作用。老实说,我对有这样一个功能感到惊讶:
“通过环境变量传递函数定义”
因此,这个问题虽然可能没有完美表述,但要求提供一个示例或案例,其中有必要具有此功能?
奖金。其他 shell zsh、dash 等也有这个功能吗?
当一个脚本调用另一个脚本时,可以导出父脚本的变量,然后它们将在子脚本中可见。导出函数是一个明显的概括:从父级导出函数,使其在子级中可见。
环境是进程向其子进程传递任意数据的唯一便捷方式。数据必须被编组为不包含空字节的字符串,这对于 shell 函数来说不是困难。还有其他潜在的方法,例如共享内存块或通过文件描述符传递的临时文件,但这些可能会导致中间程序出现问题,这些程序不知道如何处理它们或会关闭它们。程序期望在包含它们不知道或不关心的变量的环境中运行,因此它们不会覆盖或删除它们。
选择使用函数名称作为环境变量的名称是一种奇怪的选择。一方面,这意味着导出的变量与同名的导出函数发生冲突。
导出函数是一个旧功能。SVR2 中的Bourne shell 中添加了函数,并在同年(1984 年)发布的Version 8 shell中导出了函数。在该 shell 中,变量和函数使用相同的命名空间。我不知道函数导出是如何工作的。Heirloom shell基于 Bourne 变体,该变体具有函数但不导出它们。
ATT ksh 据说支持导出功能,但是查看源代码或使用它,我看不到它支持导出功能,从 ksh93u 开始。
env -i /usr/bin/ksh -c 'f=variable; f () { echo function; }; typeset -fx f; /usr/bin/env; ksh -c f'
_=*25182*/usr/bin/env
PWD=/home/gilles
SHLVL=1
A__z="*SHLVL
ksh: f: not found
Run Code Online (Sandbox Code Playgroud)
Ksh 的公共域克隆(pdksh、mksh)、dash 和 zsh 不支持导出功能。
| 归档时间: |
|
| 查看次数: |
985 次 |
| 最近记录: |