'\" te .\" Copyright (c) 2007, 2011, Oracle and/or its affiliates.All rights reserved. .\" Copyright 1989 AT&T .\" Portions Copyright (c) 1982-2007 AT&T Knowledge Ventures .TH readonly 1 "2011 年 7 月 12 日" "SunOS 5.11" "用户命令" .SH 名称 readonly \- shell 内置函数,用于保护给定变量的值不被重新赋值 .SH 用法概要 .SS "sh" .LP .nf \fBreadonly\fR [\fIname\fR]... .fi .SS "ksh88" .LP .nf \fB**readonly\fR [\fIname\fR [= \fIvalue\fR]]... .fi .LP .nf \fB**readonly\fR \fB-p\fR .fi .SS "ksh" .LP .nf \fB++readonly\fR [\fB-p\fR] [\fIname\fR [= \fIvalue\fR]]... .fi .SH 描述 .SS "sh" .sp .LP 给定 \fIname\fR 标记为 \fBreadonly\fR,而且后续赋值可能无法更改这些 \fIname\fR 的值。如果未给定参数,则会输出所有 \fBreadonly\fR 名称的列表。 .SS "ksh88" .sp .LP 将给定的 \fIname\fR 标记为 \fBreadonly\fR,且不能通过后续赋值更改这些名称。 .sp .LP 指定了 \fB-p\fR 时,\fBreadonly\fR 按以下格式将所有只读变量的名称和值写入到标准输出中: .sp .in +2 .nf "readonly %s=%s\en", \fIname\fR, \fIvalue\fR .fi .in -2 .sp .sp .LP 如果 \fIname\fR 已设置并且: .sp .in +2 .nf "readonly $s\en", \fIname\fR .fi .in -2 .sp .sp .LP 如果 \fIname\fR 未设置。 .sp .LP shell 会设置输出的格式,包括适当使用引号,以便适合作为在 shell 执行环境中实现相同值和 \fBreadonly\fR 属性设置结果的命令重新输入 shell,其中: .RS +4 .TP 1. 具备输出时设置的值的变量未设置 \fBreadonly\fR 属性。 .RE .RS +4 .TP 2. 在输出时取消设置的变量在将保存的输出重新输入 shell 时不具备任何值。 .RE .sp .LP 在本手册页上,前面带有一个或两个 \fB**\fR(星号)的 \fBksh88\fR(1) 命令会按照以下方式受到特殊处理: .RS +4 .TP 1. 命令完成时,该命令前面的变量赋值列表仍然有效。 .RE .RS +4 .TP 2. 在变量赋值之后处理 I/O 重定向。 .RE .RS +4 .TP 3. 脚本中包含的错误会导致其中止。 .RE .RS +4 .TP 4. 如果字的后面是前面加有 \fB**\fR 的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这表示在 \fB=\fR 符号之后执行波浪号替换,并且不执行字拆分和文件名生成。 .RE .SS "ksh" .sp .LP \fBreadonly\fR 会为名称指定的每个变量设置 \fBreadonly\fR 属性,防止变量值遭到更改。如果指定了 \fB=\fR\fIvalue\fR,变量名称会在为变量设置 \fBreadonly\fR 之前设置为 \fIvalue\fR。 .sp .LP 如果未指定名称,则所有 \fBreadonly\fR 变量的名称和值都会写入标准输出。 .sp .LP \fBreadonly\fR 作为声明命令内置在 shell 中,因此不会对参数执行字段分隔和路径名扩展操作。值会进行波浪号扩展。 .sp .ne 2 .mk .na \fB\fB-p\fR\fR .ad .RS 6n .rt 使得输出为 \fBreadonly\fR 命令形式,而该命令可作为 shell 的输入来重新创建当前的 \fBreadonly\fR 变量集。 .RE .sp .LP 在本手册页上,前面带有一个或两个 \fB+\fR 符号的 \fBksh\fR(1) 命令会按照以下方式受到特殊处理: .RS +4 .TP 1. 命令完成时,该命令前面的变量赋值列表仍然有效。 .RE .RS +4 .TP 2. 在变量赋值之后处理 I/O 重定向。 .RE .RS +4 .TP 3. 脚本中包含的错误会导致其中止。 .RE .RS +4 .TP 4. 它们不是有效的函数名称。 .RE .RS +4 .TP 5. 如果字的后面是前面加有 \fB++\fR 的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这意味着将在 \fB=\fR 符号之后执行波浪号替换,并且不执行字段分割和文件名生成。 .RE .SH 退出状态 .SS "ksh" .sp .LP 将返回以下退出值: .sp .ne 2 .mk .na \fB\fB0\fR\fR .ad .RS 6n .rt 成功完成。 .RE .sp .ne 2 .mk .na \fB\fB>0\fR\fR .ad .RS 6n .rt 出现错误。 .RE .SH 属性 .sp .LP 有关下列属性的说明,请参见 \fBattributes\fR(5): .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性类型属性值 _ 可用性system/core-os .TE .SH 另请参见 .sp .LP \fBksh\fR(1)、\fBksh88\fR(1)、\fBsh\fR(1)、\fBtypeset\fR(1)、\fBattributes\fR(5)