The wiki source of YSLib documentation.
Revision | 372d725bb7661d5ca0c908cab87a520247f7a122 (tree) |
---|---|
Time | 2020-12-26 21:56:50 |
Author | FrankHB <frankhb1989@gmai...> |
Commiter | FrankHB |
Development.zh-CN.md: 添加链接;明确资源路径默认值;修订 shell 脚本解释环境和 shell 语言使用规则。
@@ -401,14 +401,15 @@ | ||
401 | 401 | * 保证能使用 `mapfile` 等 `bash` 内建命令。 |
402 | 402 | * 对其它 POSIX shell 脚本: |
403 | 403 | * 使用符合 POSIX 的 shell ,或使用以上要求相同的 `bash` 运行 shell 脚本。 |
404 | -* 变量 `IFS` 未设置或设置为默认值 `:` 。 | |
405 | -* 同 `bash` 的 `-p` 选项启用时效果相同。 | |
406 | - * 用户应保证不设置 `CDPATH` 等 `-p` 忽略的环境变量及 `$BASH_ENV` 等启动文件以避免未预期的不同行为。 | |
404 | +* 不论是否设置了变量 `POSIXLY_CORRECT` ,命令解释环境的变量满足: | |
405 | + * [特殊内建工具](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14)没有被用户定义的同名变量或别名覆盖。 | |
406 | + * 被脚本调用的 POSIX 定义的工具命令没有被用户定义的同名变量或别名覆盖为调用时可观察行为不等价的实体。 | |
407 | + * 变量 `IFS` 未设置或设置为默认值 `:` 。 | |
408 | +* 命令解释器同 `bash` 的 `-p` 选项启用时效果相同。 | |
409 | + * 用户应保证不设置 `CDPATH` 等 `-p` 忽略的环境变量及 `$BASH_ENV` 等启动文件,以避免未预期的不同行为。 | |
407 | 410 | * 脚本文件不是目标在不同目录中的符号链接。 |
408 | 411 | * 对 bash 脚本,允许使用变量 `BASH_SOURCE` 的值(如 `${BASH_SOURCE[0]}` 或 `${BASH_SOURCE%/*}` 等形式) 较可靠地判断脚本文件的路径。此时,隐含需要附加假定通过脚本文件路径确定其它资源的位置。 |
409 | 412 | * 部分脚本可能有更进一步的使用限制或不依赖 `.` 命令及命令解释器调用的差异。此时,可直接使用 `"$0"` 判断路径。 |
410 | -* 不使用和脚本中函数名冲突的别名。 | |
411 | - * 在 bash 中,这默认不需要关注,需使用 `shopt -s expand_aliases` 显式启用引起冲突的功能。 | |
412 | 413 | |
413 | 414 | 脚本实现中的调用不受以上限制。 |
414 | 415 |
@@ -427,6 +428,8 @@ | ||
427 | 428 | |
428 | 429 | ### Shell 语言使用规约 |
429 | 430 | |
431 | + 脚本程序不调整影响别名扩展的 shell 选项(如 bash 的 `shopt -u expand_aliases` )。 | |
432 | + | |
430 | 433 | 除非另行指定,已定义的 shell 函数假定不被其它变量覆盖。这允许实现省略 `readonly -f` 或 `declare -g -r -f` 声明,且允许使用相同的定义覆盖以简化调试。 |
431 | 434 | |
432 | 435 | 除非另行指定,脚本不区分未设置的环境变量和已设置但具有空值的环境变量,以允许在外部环境配置脚本的执行。这两种情形脚本都可能指定一个非空的初始值,称为变量的*默认值(default value)* 。变量是否使用默认值总在先于第一次使用变量的值的初始化时确定。变量的初始化和默认值满足以下约定: |
@@ -455,14 +458,14 @@ | ||
455 | 458 | |
456 | 459 | * 用于指定入口位置: |
457 | 460 | * `SHBuild` :外部 SHBuild 可执行文件路径。 |
458 | - * 默认值和特定脚本被设计适应的部署环境相关(例如,视不同情形,脚本可使用 `BASH_SOURCE` 或 `"$0"` )。 | |
459 | - * `SHBuild_ToolDir` :工具目录中的脚本目录。 | |
461 | + * 默认值和特定脚本被设计适应的部署环境相关(例如,视不同情形,脚本可使用 `${BASH_SOURCE[0]}` 或 `"$0"` )。 | |
462 | + * `SHBuild_ToolDir` :工具目录中的脚本目录(参见[脚本](Tools/Scripts.zh-CN.md))。 | |
460 | 463 | * 默认值由脚本根据版本库所在目录确定。 |
461 | 464 | * 用于指定版本库中的资源: |
462 | - * `SHBuild_BaseDir` : SHBuild 目录,是工具目录(参见以下有关章节)中提供 SHBuild 源代码的目录。 | |
463 | - * 默认值按脚本的相对位置确定。 | |
465 | + * `SHBuild_BaseDir` : SHBuild 目录,是工具目录中提供 SHBuild 源代码的目录。 | |
466 | + * 默认值按 `SHBuild_ToolDir` 初始化后的相对位置确定,为 `"$SHBuild_ToolDir/../SHBuild"`。 | |
464 | 467 | * `YSLib_BaseDir` :YSLib 目录,即版本库的工作目录。 |
465 | - * 默认值按脚本的相对位置确定。 | |
468 | + * 默认值按 `SHBuild_ToolDir` 初始化后的相对位置确定,为 `"$SHBuild_ToolDir/../.."`。 | |
466 | 469 | * 用于指定输出目录: |
467 | 470 | * `SHBuild_BuildDir` :构建使用的中间输出文件路径。 |
468 | 471 | * 默认值定义如下: |