英语法语西班牙语

Ad


OnWorks 网站图标

mksh - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 mksh

这是命令 mksh,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


姆克什, sh — MirBSD Korn 外壳

概要


姆克什 [-+abCefhiklmnprUuvXx[-T [!]TTY | -[-+o 选项[-c 绳子 | -s | 文件
[论点 ...]]
内置名称 [论点 ...]

商品描述


姆克什 是一个用于交互式和 shell 脚本的命令解释器。 它的
命令语言是 sh(C) shell 语言的超集,并且在很大程度上兼容
原装 Korn 外壳。 有时,本手册页可能会提供脚本建议; 而它
有时确实会考虑便携式 shell 脚本或各种标准
信息首先呈现在 姆克什 牢记并应如此看待。

an Android 用户, so 什么是 mksh?
姆克什 是一个 UNIX shell/命令解释器,类似于 COMMAND.COM or 命令文件,其中有
已经包含在 Android 开源项目中一段时间​​了。 基本上,这是一个程序
在终端(控制台窗口)中运行,接受用户输入并运行命令或脚本,
即使在后台,其他程序也可以要求它执行此操作。 任何特权
因此,您可能会遇到的弹出窗口不是 姆克什 问题,但其他人提出的问题
利用它的程序。

调用
大多数内置函数都可以直接调用,例如,如果一个链接从其名称指向
贝壳; 并非所有都有意义,但已经过测试或工作。

选项如下:

-c 绳子 姆克什 将执行包含在 绳子.

-i 交互式外壳。 从标准输入读取命令的 shell 是
“交互式”如果使用此选项或者标准输入和标准错误
附在一个 TTY(4). 交互式 shell 启用了作业控制,忽略
SIGINT、SIGQUIT 和 SIGTERM 信号,并在读取输入之前打印提示
(参见 PS1 和 PS2 参数)。 它还处理 ENV 参数或
mkshrc文件 文件(见下文)。 对于非交互式 shell, 跟踪器 选项开启
默认情况下(请参阅 命令如下)。

-l 登录外壳。 如果调用 shell 的基本名称(即 argv[0])以
'-' 或者如果使用此选项,则假定 shell 是登录 shell; 看
创业公司 联络一位教师

-p 特权壳。 如果真实用户 ID 或组 ID 不存在,则外壳是“特权”的
与有效的用户 ID 或组 ID 不匹配(请参阅 获取用户名(2)和 获取信息(2))。
清除特权选项会导致 shell 设置其有效用户 ID
(组 ID)到它的真实用户 ID(组 ID)。 有关进一步的影响,请参阅 创业公司
. 如果 shell 有特权并且没有明确设置这个标志,则
“特权”选项在处理启动文件后自动清除。

-r 限制壳。 如果使用此选项,则外壳是“受限的”。 下列
限制在 shell 处理任何配置文件和 ENV 后生效
文件:

· cd (和 目录) 命令被禁用。
· SHELL、ENV 和 PATH 参数不能更改。
· 不能用绝对或相对路径指定命令名称。
· -p 内置命令的选项 命令 不能使用。
· 不能使用创建文件的重定向(即“>”、“>|”、“>>”、“<>”)。

-s shell 从标准输入读取命令; 所有非选项参数都是
位置参数。

-T 姓名姆克什TTY(4)设备给定。 路径 姓名, /dev/ttyCname
/dev/ttyname 是按顺序尝试的。 除非 姓名 以感叹号开头
('!'),这是在子shell中完成并立即返回。 如果 姓名 是破折号
('-'),而是从控制终端(守护进程)中分离出来。

除了上述选项,在 也可以使用内置命令
在命令行上:两者 [-+abCefhkmnuvXx]和[-+o 选项] 可用于单个字母
或长选项,分别。

如果既不 -c 也不是 -s 选项被指定,第一个非选项参数指定
shell 从中读取命令的文件的名称。 如果没有非选项参数,则
shell 从标准输入读取命令。 外壳的名称(即
$0) 确定如下:如果 -c 使用了选项并且有一个非选项参数,
它用作名称; 如果正在从文件中读取命令,则该文件将用作
姓名; 否则,将使用调用 shell 的基本名称(即 argv[0])。

如果命令行中指定的命令文件可以,则 shell 的退出状态为 127
不打开,或者如果在执行一个致命的语法错误期间发生非零
脚本。 在没有致命错误的情况下,退出状态是最后一个命令的状态
已执行,如果没有执行命令,则为零。

创业公司
有关这些文件的实际位置,请参阅 FILES. 登录 shell 处理系统
首先是个人资料。 然后,特权 shell 会处理 suid 配置文件。 非特权登录
shell 接下来处理用户配置文件。 非特权交互式 shell 检查该值
ENV 参数经过参数、命令、算术和波浪号 ('~')
代换; 如果未设置或为空,则处理用户 mkshrc 配置文件; 否则,如果一个文件
其名称为替换结果存在,处理; 不存在是无声的
忽略。 如果两者都不是,则特权 shell 会删除特权 -p 上给出的选项
在启动文件的执行过程中也没有设置命令行。

命令 句法
shell 通过删除任何反斜杠-换行符组合来开始解析它的输入,然后
把它分解成 . 单词(是字符序列)由不带引号的
空白字符(空格、制表符和换行符)或元字符('<'、'>'、'|'、';'、'('、
')', 和 '&')。 除了分隔单词,空格和制表符被忽略,而换行符
通常分隔命令。 元字符用于构建以下内容 令牌:
'<'、'<&'、'<<'、'<<<'、'>'、'>&'、'>>'、'&>'等用于指定重定向(参见
输入输出 重定向 以下); '|' 用于创建管道; '|&' 用于创建 co-
进程(见 协程 以下); ';' 用于分隔命令; '&' 用于创建
异步管道; '&&' 和 '||' 用于指定条件执行; ';;', ';&'
和';|' 用于 案件 声明; '(( .. ))' 用于算术表达式; 和
最后,'( .. )' 用于创建子shell。

空格和元字符可以使用反斜杠 ('\') 单独引用,或在
使用双 ('"') 或单 ("'") 引号进行分组。注意以下字符是
也由外壳特别处理,如果要代表自己,则必须引用:
'\', '"', ''', '#', '$', '`', '~', '{', '}', '*', '?', and '['。其中前三个
是上面提到的引用字符(见 引用 以下); '#',如果在
一个词的开头,引入一个注释——'#' 之后的所有内容,直到最近的
换行被忽略; '$' 用于引入参数、命令和算术
替换(见 换人 以下); '`' 引入了旧式命令替换
(见 换人 以下); '~' 开始目录扩展(见 波浪号 扩张 以下); '{'
和 '}' 分隔 长山壕(1)-风格交替(见 支撑 扩张 以下); 最后,'*',
'?' 和 '[' 用于文件名生成(参见 文件 姓名 模式 下文)。

随着单词和标记被解析,shell 构建命令,其中有两个基本的
类型: 简单命令,通常是执行的程序,以及 复合命令,这样
as if 语句、分组结构和函数定义。

一个简单的命令由一些参数分配的组合组成(参见 参数
下面),输入/输出重定向(见 输入输出 重定向 下面),以及命令词;
唯一的限制是参数分配出现在任何命令字之前。 这
命令字(如果有)定义要执行的命令及其参数。 这
命令可以是 shell 内置命令、函数或外部命令(即单独的
使用 PATH 参数定位的可执行文件; 看 命令 执行 下文)。
请注意,所有命令构造都有退出状态:对于外部命令,这是相关的
到返回的状态 等待(2)(如果找不到命令,则退出状态为
127; 如果无法执行,则退出状态为126); 其他命令的退出状态
构造(内置命令、函数、复合命令、管道、列表等)都是
定义明确,并在描述构造的地方进行描述。 a的退出状态
仅由参数分配组成的命令是最后一个命令替换的命令
在参数分配期间执行,如果没有命令替换,则为 0。

命令可以使用“|”链接在一起令牌形成管道,其中
每个命令的标准输出,但最后一个是通过管道传输的(请参阅 (2)) 到标准输入
以下命令。 管道的退出状态是它的最后一个命令的退出状态,除非
管道故障 选项设置(见那里)。 管道的所有命令都单独执行
子壳; 这是 POSIX 允许的,但与 AT&T UNIX 的两种变体不同 KSH,其中
除了最后一个命令之外的所有命令都是在子shell中执行的; 见 内置的描述
影响和解决方法。 管道可能以“!”为前缀保留字
导致管道的退出状态在逻辑上被补充:如果原始状态
为 0,补充状态将为 1; 如果原始状态不为 0,则补充
状态将为 0。

书单 可以通过以下任何标记分隔管道来创建命令:
“&&”、“||”、“&”、“|&”和“;”。 前两个用于条件执行:“cmd1 && cmd2=
执行 cmd2 仅当退出状态为 cmd1 为零; '||' 是相反的—— cmd2 is
仅当退出状态为 cmd1 非零。 '&&' 和 '||' 享有同等优先权
高于'&'、'|&'和';',它们也具有相同的优先级。 笔记
'&&' 和 '||' 运算符是“左结合的”。 例如,这两个
命令将只打印“bar”:

$ false && echo foo || 回声条
$真|| echo foo && echo bar

'&' 标记使前面的命令异步执行; 也就是说,壳
启动命令但不等待它完成(shell 会跟踪
异步命令的状态; 看 工作 控制 以下)。 当异步命令是
在禁用作业控制时启动(即在大多数脚本中),命令以
信号 SIGINT 和 SIGQUIT 被忽略,输入重定向自 的/ dev / null的 (然而,
异步命令中指定的重定向优先)。 “|&”运算符
启动一个协进程,它是一种特殊的异步进程(见 协程
以下)。 注意一个命令必须跟在'&&'和'||'之后运营商,虽然它不需要
跟在“&”、“|&”或“;”之后。 列表的退出状态是最后执行的命令的退出状态,
除了异步列表,其退出状态为 0。

使用以下保留字创建复合命令。 这些话只
如果它们没有被引用并且它们被用作命令的第一个单词(即
它们前面不能有参数分配或重定向):

case else 函数然后! (
如果时间 [[ ((
完成 fi 直到 {
elif 选择 while }

在以下复合命令描述中,命令列表(表示为 名单) 那是
后跟保留字必须以分号、换行符或 a(语法上
正确)保留字。 例如,以下都是有效的:

$ { 回声 foo; 回声条; }
$ { 回声 foo; 回声条}
$ { { 回声 foo; 回声条; } }

这是无效的:

$ { 回声 foo; 回声栏 }

(名单)
执行 名单 在一个子外壳中。 没有隐式的方式来传递环境变化
一个子shell返回到它的父级。

{ 名单;}
复合构建体; 名单 被执行,但不在子shell中。 注意 '{' 和 '}'
是保留字,不是元字符。

案件 在 [[(] 模式 [| 模式] ...) 名单 终结者] ... esac
案件 语句尝试匹配 针对指定的 模式;的 名单
与第一个成功匹配的模式相关联的执行。 使用的模式
案件 语句与用于文件名模式的语句相同,不同之处在于
关于“.”的限制和 '/' 被删除。 请注意,任何未引用的空格之前
并在剥离图案后; 必须引用模式中的任何空格。 这俩
单词和模式受参数、命令和算术替换的影响,
以及波浪号替换。

由于历史原因,可能会使用左括号和右括号代替 inESAC 例如
案件 $ foo { *) 回音 酒吧 ;; }.

列表 终结者s 是:

';;' 在列表之后终止。

';&' 进入下一个列表。

';|' 评估剩余的模式列表元组。

a的退出状态 案件 语句是被执行的语句 名单; 如果不 名单 is
执行,退出状态为零。

姓名 [在 ...]; 做 名单; 完毕
对于每一个 在指定的单词列表中,参数 姓名 设置为单词和
名单 被执行。 如果 in 不用于指定单词列表,位置参数
($1, $2, etc.) 代替。 由于历史原因,开大括号和闭大括号可能
代替 do完成 例如 i; { 回音 $我; }. a的退出状态
语句是最后的退出状态 名单; 如果 名单 从不执行,退出状态
是零。

if 名单; 然后 名单; [埃利夫 名单; 然后 名单;] ... [别的 名单;] 非
如果第一个退出状态 名单 为零,第二个 名单 被执行; 除此以外,
名单ELIF,如果有的话,会产生类似的结果。 我摔倒
以下列表 ifELIFs 失败(即以非零状态退出), 名单
其他 被执行。 一个的退出状态 if 声明是非
有条件 名单 即被执行; 如果没有无条件 名单 被执行,退出
状态为零。

选择 姓名 [在 ...]; 做 名单; 完毕
选择 语句提供了一种向用户显示菜单的自动方法
并从中选择。 指定的枚举列表 (s) 印在
标准错误,后跟提示(PS3:通常是“#?”)。 一个数字对应
然后从标准输入中读取枚举的单词之一, 姓名 被设置为
选定的单词(如果选择无效,则取消设置),REPLY 设置为读取的内容
(前导/尾随空格被剥离),和 名单 被执行。 如果一个空行(即
零个或多个 IFS 八位字节)被输入,菜单被重印而不执行 名单.

什么时候 名单 完成,如果REPLY为NULL,则打印枚举列表,提示为
印刷等。 这个过程一直持续到读到一个文件尾,一个中断
收到,或 打破 语句在循环内执行。 如果“in word ...”是
如果省略,则使用位置参数(即 $1、$2 等)。 对于历史
原因,可以使用开括号和闭括号代替 do完成 例如 选择 i; {
回音 $我; }. a的退出状态 选择 语句为零,如果 打破 声明是
用于退出循环,否则非零。

直到 名单; 做 名单; 完毕
这就像 , 除了主体仅在退出状态为
第一位 名单 非零。

名单; 做 名单; 完毕
A 是一个预先检查的循环。 它的主体与退出状态一样频繁地执行
第一位 名单 为零。 a的退出状态 语句是最后的退出状态
名单 在循环体中; 如果没有执行正文,则退出状态为
零。

功能 姓名 { 名单;}
定义函数 姓名 (见 主要工作内容 以下)。 请注意重定向指定
在函数执行时执行函数定义之后,而不是在执行时
函数定义被执行。

姓名() 命令
大致相同 功能 (见 主要工作内容 以下)。 后面的空格(空格或制表符)
姓名 大多数时候会被忽略。

功能 姓名(){ 名单;}
与...相同 姓名()(打坏主义)。 这 功能 关键字被忽略。

[-p[管道]
命令 执行 部分描述了 保留字。

(( 表达 ))
算术表达式 表达 被评估; 相当于“让表达式”(见
算术 表达式 命令,下面)在复合结构中。

[[ 表达 ]]
类似于 test[ ... ] 命令(稍后描述),具有以下
例外情况:

· 不对参数执行字段拆分和文件名生成。

· -a (AND) 和 -o (OR) 运算符分别替换为“&&”和“||”。

· 运算符(例如'-f', '=', '!') 必须不加引号。

· 参数、命令和算术替换作为表达式执行
评估和惰性表达式评估用于“&&”和“||” 运营商。
这意味着在下面的语句中, $( 被评估当且仅当
文件 FOO 存在且可读:

$ [[ -r foo && $(

· '!=' 和 '=' 表达式的第二个操作数是模式的子集(例如
比较 [[ foob​​ar = 妈的 ]] 成功)。 这甚至可以间接起作用:

$ bar=foobar; baz='f*r'
$ [[ $bar = $baz ]]; 回声 $?
$ [[ $bar = "$baz" ]]; 回声 $?

也许令人惊讶的是,第一个比较成功了,而第二个则没有。
目前,这不适用于所有 extglob 元字符。

引用
引用用于防止外壳对字符或单词进行特殊处理。 有
三种引用方法。 首先,'\' 引用下面的字符,除非它在
行尾,在这种情况下,'\' 和换行符都被删除。 二、单
引用 (“'”) 引用直到下一个单引号的所有内容(这可能跨越行)。 三、一个
双引号 ('"') 引用所有字符,除了 '$'、'`' 和 '\',直到下一个未转义
双引号。 双引号内的 '$' 和 '`' 具有它们通常的含义(即参数、
算术或命令替换),除非不对结果进行字段拆分
双引号替换,旧式的命令替换形式有
启用双引号的反斜杠引用。 如果双引号字符串中的 '\' 是
后跟'\'、'$'、'`'或'"',则替换为第二个字符;如果后跟
通过换行符,'\' 和换行符都被剥离; 否则,'\' 和
后面的字符不变。

如果单引号字符串前面是不带引号的“$”,则为 C 风格的反斜杠扩展(请参阅
下面)被应用(即使里面的单引号字符也可以转义并且不会终止
然后是字符串); 扩展的结果被视为任何其他单引号字符串。 如果一个
双引号字符串前面有一个不带引号的 '$','$' 被简单地忽略。

反斜杠 扩张
在扩展反斜杠的地方,某些 C 和 AT&T UNIX KSH 或 GNU 打坏 样式
转义被翻译。 这些包括“\a”、“\b”、“\f”、“\n”、“\r”、“\t”、“\U########”、
'\u####' 和 '\v'。 对于 '\U########' 和 '\u####',“#”表示十六进制数字
可能没有多达四个或八个; 这些转义将 Unicode 代码点转换为 UTF-8。
此外,'\E' 和 '\e' 扩展为转义字符。

打印 内置模式、'\"'、'\'' 和 '\?' 被明确排除;八进制序列
必须有最多三个八进制数字“#”以数字零 ('\0###') 为前缀;
十六进制序列 '\x##' 限制为无最多两个十六进制数字“#”; 两个都
八进制和十六进制序列转换为原始八位字节; '\#',其中 # 不是上述任何一种,
转换为 \#(保留反斜杠)。

C 风格模式下的反斜杠扩展略有不同:八进制序列 '\###' must have
没有数字零前缀一到三个八进制数字“#”并产生原始八位字节;
十六进制序列 '\x#*' 贪婪地吃掉尽可能多的十六进制数字“#”,并且
以第一个非十六进制数字结尾; 这些将 Unicode 代码点转换为
UTF-8。 序列 '\c#',其中“#”是任何八位字节,转换为 Ctrl-#(基本上
意思是,'\c?' 变为 DEL,其他所有内容都与 0x1F 进行按位与运算)。 最后,'\#',其中
# 不是上述任何一个,转换为 #(修剪反斜杠),即使它是一个
新队。

别名
有两种类型的别名:普通命令别名和跟踪别名。 命令别名
通常用作长命令或常用命令的简写。 外壳膨胀
当它读取第一个单词时命令别名(即用别名替换它的值)
的命令。 重新处理扩展别名以检查更多别名。 如果一个命令
别名以空格或制表符结尾,还会检查以下单词的别名扩展。 这
当找到一个不是别名的词时,别名扩展过程停止,当引用的词
找到,或者当找到当前正在扩展的别名词时。 别名是
特别是一个交互式功能:虽然它们碰巧在脚本和
某些情况下的命令行,在词法分析过程中会扩展别名,因此它们的使用必须在
将命令树与其定义分开; 否则,将找不到别名。
值得注意的是,命令列表(用分号分隔,在命令替换中也用换行符)
可能是一个相同的解析树。

以下命令别名由 shell 自动定义:

autoload='\typeset -fu'
功能='\排版 -f'
hash='\内置别名 -t'
history='\builtin fc -l'
整数='\排版 -i'
本地='\排版'
登录='\执行登录'
nameref='\typeset -n'
nohup='nohup'
r='\内置 fc -e -'
type='\builtin wherece -v'

跟踪别名允许 shell 记住它在哪里找到特定命令。 首先
当 shell 对标记为跟踪别名的命令进行路径搜索时,它会保存
命令的完整路径。 下次执行命令时,shell 会检查
保存路径以查看它是否仍然有效,如果是,则避免重复路径搜索。
可以使用以下命令列出和创建跟踪的别名 别号 -t. 注意改变PATH
参数清除所有跟踪别名的保存路径。 如果 跟踪器 选项已设置
(即 -o 跟踪器 or -h),shell 会跟踪所有命令。 设置了这个选项
自动用于非交互式 shell。 对于交互式 shell,只有以下
命令被自动跟踪: (1) cc(1) CHMOD(1) cp(1) 日期(1) ed(1)
emacs的(1) grep的(1) ls(1) 使(1) mv(1) pr(1) rm(1) 口渴(1) sh(1) vi(1), (1)。

换人
shell 执行简单命令的第一步是对
命令的话。 共有三种替换:参数、命令和
算术。 参数替换,下一节将详细介绍,
采取形式 $姓名 或 ${...}; 命令替换采用 $(命令),或
(已弃用)`命令` 或(在当前环境中执行)${ 命令;} 并剥离
尾随换行符; 和算术替换采用 $((表达))。 解析
当前环境命令替换在打开后需要空格、制表符或换行符
大括号和右大括号被识别为关键字(即前面有一个换行符
或分号)。 它们也被称为 funsubs(函数替换)并且表现得像
功能在那 本地回报 工作,并在那 出口 终止父壳; 贝壳
选项是共享的。

替换的另一个变体是 valsubs(值替换)${|命令;} 哪个是
也在当前环境中执行,如 funsubs,但与父级共享它们的 I/O;
相反,它们评估为初始为空的表达式局部变量 REPLY 的任何值
设置在 命令s.

如果替换出现在双引号之外,则替换的结果是
一般根据IFS的当前值进行词或字段拆分
范围。 IFS 参数指定用于分解字符串的八位字节列表
分成几个词; 出现在 IFS 中的空间、制表符和换行符中的任何八位字节
八位字节被称为“IFS 空白”。 一个或多个 IFS 空白八位字节的序列,在
与零个或一个非 IFS 空白八位字节组合,界定一个字段。 作为特例,
前导和尾随 IFS 空格被剥离(即没有前导或尾随空字段是
由它创建); 前导或尾随非 IFS 空格确实会创建一个空字段。

示例:如果 IFS 设置为“ :”,并将 VAR 设置为
“ 一种: B::D”,替换 $VAR 导致四个字段:'A',
'B'、''(空字段)和 'D'。 注意如果IFS参数设置为空
string,没有进行字段拆分; 如果未设置,则默认值是空格、制表符和
使用换行符。

另请注意,字段拆分仅适用于
代换。 使用前面的示例,替换 $VAR:E 导致
字段:“A”、“B”、“”和“D:E”,而不是“A”、“B”、“”、“D”和“E”。 这种行为是 POSIX
兼容,但与其他一些进行字段拆分的 shell 实现不兼容
在包含替换或使用 IFS 作为通用空白分隔符的单词上。

除非另有说明,替换的结果也受大括号扩展的影响
和文件名扩展(请参阅下面的相关部分)。

命令替换被指定命令生成的输出替换,该输出是
在子shell中运行。 对于 $(命令) 和 ${|命令;} 和 ${ 命令;} 替换,正常
引用规则用于 命令 被解析; 但是,对于已弃用的`命令` 形式,一个
'\' 后跟任何 '$'、'`' 或 '\' 被剥离(当替换是一部分时,'"' 也是如此
双引号字符串); 后跟任何其他字符的反斜杠 '\' 不变。
作为命令替换中的一个特殊情况,以下形式的命令文件 被解释为
意思是替换的内容 文件。 注意 $( 具有与 $(猫 富).

请注意,某些 shell 不使用递归解析器进行命令替换,从而导致
某些结构的失败; 为了便于携带,请用作解决方法 'x=$(cat) <<"EOF"'(或
保留换行符 'x=<<"EOF"' 扩展名) 而不是仅仅吞掉字符串。 IEEE 标准 1003.1
(“POSIX.1”) 建议使用形式为 'x=$(case $foo in (bar) echo $bar 的 case 语句
;; (*) 回声 $baz ;; esac)' 代替,这将起作用但不能作为示例
便携性问题。

x=$(case $foo in bar) echo $bar ;; *) 回声 $baz ;; esac)
# 上面的旧壳无法解析; 下面是解决方法
x=$(eval $(cat)) <<"EOF"
case $foo in bar) echo $bar ;; *) 回声 $baz ;; esac
EOF

算术替换由指定表达式的值替换。 为了
例如,命令 打印 $((2+3*4)) 显示 14. 见 算术 表达式 查阅
表达式的描述。

参数
参数是shell变量; 它们可以被赋值并且它们的值可以被访问
使用参数替换。 参数名称是特殊的单一名称之一
下面描述的标点符号或数字字符参数,或一个字母后跟零或
更多的字母或数字(“_”算作一个字母)。 后一种形式可以视为数组
通过附加形式 [表达式]在哪里 表达式 是一个算术表达式。
数组索引 姆克什 限制在 0 到 4294967295 的范围内,包括 XNUMX 到 XNUMX。 那是,
它们是一个 32 位无符号整数。

参数替换采用 $ 形式姓名, ${姓名}, 或 ${姓名[表达式]} 在哪里 姓名 是一个
参数名称。 用 ${ 替换所有数组元素姓名[*]} 和 ${姓名[@]} 作品
相当于 $* 和 $@ 的位置参数。 如果在一个
未设置的参数(或数组参数元素),替换为空字符串
除非 名词集 选项 ( -o 名词集 or -u) 被设置,在这种情况下会发生错误。

可以通过多种方式为参数赋值。 一、shell隐式设置
一些参数,如“#”、“PWD”和“$”; 这是特殊单个字符的唯一方法
参数设置。 其次,参数是从shell的环境中导入的
启动。 三、可以在命令行给参数赋值:例如, FOO=酒吧
将参数“FOO”设置为“bar”; 可以在单个参数上给出多个参数分配
命令行,它们后面可以跟一个简单的命令,在这种情况下,赋值是
仅在命令期间有效(此类分配也被导出;参见
下面是关于这点的含义)。 请注意,参数名称和“=”都必须是
不加引号的 shell 以识别参数分配。 构造 FOO+=巴兹 也是
认可; 旧值和新值立即连接。 第四种设置方式
一个参数是 出口, 全球化, 只读排版 命令; 看到他们的
中的说明 命令 执行 部分。 第五, 选择 循环设置参数
以及 获取选项, -A 命令。 最后,可以分配参数
在算术表达式中使用赋值运算符的值(请参阅 算术 表达式
下面)或使用 ${姓名=折扣值} 参数替换的形式(见下文)。

具有导出属性的参数(使用 出口 or 排版 -x 命令,或通过
参数分配后跟简单的命令)放在环境中(请参阅
关于(7)) 由 shell 运行的命令如下 姓名=折扣值 对。 参数的顺序
出现在一个命令的环境中是未指定的。 当 shell 启动时,它
从其环境中提取参数及其值并自动设置导出
这些参数的属性。

修饰符可以应用于 ${姓名参数替换的形式:

${姓名:-}
If 姓名 被设置而不是 NULL,它被替换; 除此以外, 被取代。

${姓名:+}
If 姓名 被设置而不是 NULL, 被取代; 否则,没有任何东西被替代。

${姓名:=}
If 姓名 被设置而不是 NULL,它被替换; 否则,它被分配
结果值 姓名 被取代。

${姓名:?}
If 姓名 被设置而不是 NULL,它被替换; 除此以外, 印在
标准错误(前面是 姓名:) 并发生错误(通常会导致终止
使用 '.' 获取的 shell 脚本、函数或脚本。 内置)。 如果 is
省略,则使用字符串“参数为空或未设置”。 目前是一个错误,
if 是一个扩展为空字符串的变量,错误信息也是
打印。

请注意,对于以上所有内容, 实际上被认为是引用的,并且特殊解析
规则适用。 表达式是否双引号的解析规则也不同:
然后使用双引号规则,除了双引号本身 ('"') 和结束
大括号,如果反斜杠转义,将应用引号删除。

在上面的修饰符中,':'可以省略,在这种情况下,条件只取决于
姓名 正在设置(相对于设置而不是 NULL)。 如果 需要,参数,命令,
对其执行算术和波浪号替换; 如果 不需要,它不是
评估。

还可以使用以下形式的参数替换(如果 姓名 是一个数组,
键为“0”的元素将在标量上下文中被替换):

${#姓名}
位置参数的数量,如果 姓名 是 '*'、'@' 或未指定; 除此以外
参数字符串值的长度(以字符为单位) 姓名.

${#姓名[*]}
${#姓名[@]}
数组中元素的数量 姓名.

${%姓名}
参数字符串值的宽度(在屏幕列中) 姓名, 或 -1 如果
${姓名} 包含一个控制字符。

${!姓名}
引用的变量名 姓名。 这会是 姓名 除了什么时候 姓名 is
名称引用(绑定变量),由 名称引用 命令(这是一个别名
排版 -n).

${!姓名[*]}
${!姓名[@]}
数组中索引(键)的名称 姓名.

${姓名#模式}
${姓名##模式}
If 模式 匹配参数值的开头 姓名,匹配的文本是
从替换结果中删除。 单个“#”导致最短
匹配,其中两个导致最长的匹配。 不能应用于向量
(${*} 或 ${@} 或 ${array[*]} 或 ${array[@]})。

${姓名%模式}
${姓名%%模式}
类似于 ${..#..} 替换,但它从值的末尾删除。 不可能是
应用于向量。

${姓名/模式/字符串}
${姓名/#模式/字符串}
${姓名/%模式/字符串}
${姓名//模式/字符串}
最长的比赛 模式 在参数值中 姓名 被替换为 绳子
(删除如果 绳子 是空的; 在这种情况下,可以省略尾部斜杠 ('/')。
前导斜杠后跟“#”或“%”会使模式锚定在
分别是值的开始或结束; 空无锚 模式原因没有
替代品; 单个前导斜杠或使用 模式 匹配空
string 导致替换只发生一次; 两个前导斜杠导致所有
要替换的值中匹配的出现次数。 不能应用于矢量。
执行效率低下,可能会很慢。

${姓名:邮寄:LEN}
最快的 LEN 的字符 姓名, 从位置开始 邮寄, 被替换。 两个都
邮寄 和:LEN 是可选的。 如果 邮寄 为负数,从结束开始计数
细绳; 如果省略,则默认为 0。如果 LEN 被省略或大于
剩余字符串的长度,所有这些都被替换。 两个都 邮寄LEN ,那恭喜你,
计算为算术表达式。 目前, 邮寄 必须以空格开头,
要识别的左括号或数字。 不能应用于矢量。

${姓名@#}
扩展的散列(使用 BAFH 算法) 姓名. 这也用
在内部用于 shell 的哈希表。

${姓名@Q}
可安全重新输入的带引号的表达式,其值为 姓名
参数,被替换。

需要注意的是 模式 可能需要扩展的通配模式 (@(...))、单 ('...') 或双
("...") 引用转义,除非 -o sh 置。

以下特殊参数是shell隐式设置的,不能直接设置
使用赋值:

! 最后启动的后台进程的进程 ID。 如果没有后台进程
已启动,参数未设置。

# 位置参数的数量($1、$2 等)。

$ shell 的 PID,如果是子 shell,则为原始 shell 的 PID。 做 不是
使用这种机制来生成临时文件名; 看 临时表(1) 代替。

- 当前单字母选项的串联(参见 下面的命令
的选项列表)。

? 执行的最后一个非异步命令的退出状态。 如果最后一条命令
被信号杀死, $? 设置为 128 加上信号编号,但最多为 255。

0 外壳的名称,确定如下:第一个参数 姆克什 如果它是
调用 -c 给出了选项和参数; 否则 文件 论证,如果
它是提供的; 或者 shell 被调用的基本名称(即 argv[0])。 0 美元
还设置为当前脚本的名称或当前函数的名称,
如果它是用 功能 关键字(即 Korn shell 样式函数)。

1 .. 9 提供给 shell、函数或
使用 '.' 获取的脚本内置。 进一步的位置参数可能是
使用 ${ 访问}.

* 所有位置参数(0 除外),即 $1, $2, $3, ...
如果在双引号之外使用,参数是单独的词(受
分词); 如果在双引号内使用,参数由
IFS 参数的第一个字符(如果 IFS 为 NULL,则为空字符串)。

@ 与...一样 $*, 除非它在双引号内使用,在这种情况下,一个单独的词是
为每个位置参数生成。 如果没有位置参数,则没有
词生成。 $@ 可用于逐字访问参数,而不会丢失
NULL 参数或用空格分割参数。

以下参数由 shell 设置和/或使用:

_(下划线)shell执行外部命令时,该参数
在新进程的环境中设置为执行的路径
命令。 在交互使用中,这个参数也在父shell中设置为
上一条命令的最后一个字。

BASHPID 外壳或子外壳的 PID。

CDPATH 与 PATH 类似,但用于将参数解析为 cd 内置命令。 笔记
如果设置了 CDPATH 并且不包含 '.' 或空字符串元素,
不搜索当前目录。 此外,该 cd 内置命令将显示
在任何搜索路径中找到匹配项时的结果目录
空路径。

COLUMNS 设置为终端或窗口上的列数。 始终设置,默认值
到 80,除非报告的值 姿势(1) 非零且足够理智
(最小为 12x3); LINES 类似。 该参数由
交互式线编辑模式,并由 选择, -o -l 命令
格式化信息列。 从环境导入或取消设置
此参数删除与实际终端大小的绑定,以支持
提供的价值。

ENV 如果在执行任何配置文件后发现设置了此参数,则
扩展值用作外壳启动文件。 它通常包含功能
和别名定义。

ERRNO 外壳的整数值 埃尔诺 多变的。 它指出了最后的原因
系统调用失败。 尚未实现。

EXECSHELL 如果设置,则假定此参数包含要用于
执行命令 执行(2) 执行失败且不以 a 开头
“#!“ 序列。

FCEDIT 使用的编辑器 fc 命令(见下文)。

FPATH 与 PATH 类似,但在执行未定义函数以定位文件时使用
定义函数。 当无法使用命令找到命令时,也会搜索它
小路。 看 主要工作内容 了解更多信息。

HISTFILE 用于存储命令历史的文件名。 当分配给或取消设置时,
文件被打开,历史被截断,然后从文件中加载; 随后的
新命令(可能由多行组成)一旦被附加
编译成功。 此外,shell 的几次调用将共享
history 如果它们的 HISTFILE 参数都指向同一个文件。

备注: 如果 HISTFILE 未设置或为空,则不使用历史文件。 这是
与 AT&T UNIX 不同 KSH.

HISTSIZE 通常为历史存储的命令数。 默认值为 2047。 做
不要将此值设置为非常高的值,例如 1000000000,因为 姆克什 能够
然后没有为历史分配足够的内存并且不会启动。

HOME 的默认目录 cd 命令和代替一个的值
不合格 ~ (见 波浪号 扩张 下文)。

IFS 内部字段分隔符,在替换期间使用并由 命令,到
将值拆分为不同的参数; 通常设置为空格、制表符和换行符。
我们 换人 上面有详细信息。

备注: 这个参数在shell的时候是不从环境中导入的
开始。

KSHEGID shell 的有效组 ID。

KSHGID 外壳的真实组 ID。

KSHUID shell 的真实用户 ID。

KSH_VERSION shell 的名称和版本(只读)。 另请参阅版本命令
in Emacs的 编辑 模式Vi 编辑 模式 部分,如下。

LINENO 当前正在执行的函数或 shell 脚本的行号
被执行。

LINES 设置为终端或窗口上的行数。 始终设置,默认为
24. 见列。

大纪元
自纪元以来的时间,由 获取时间(2)、格式化为十进制
电视秒 后跟一个点 ('.') 和 电视_usec 填充到六位小数
数字。

OLDPWD 上一个工作目录。 取消设置如果 cd 没有成功改变
自 shell 启动后的目录,或者 shell 不知道它在哪里。

OPTARG 使用时 获取选项,它包含解析选项的参数,如果它
需要一个。

OPTIND 使用时要处理的下一个参数的索引 获取选项. 分配 1
到这个参数导致 获取选项 从一开始就处理参数
下次调用时。

PATH 一个冒号(OS/2 上的分号)分隔的搜索目录列表
查找使用 '.' 获取的命令和文件时命令(见下文)。
由前导或尾随冒号或两个相邻的冒号产生的空字符串
冒号,被视为“。” (当前目录)。

PGRP shell 的进程组领导的进程 ID。

PIPESTATUS 一个包含最后一个的错误级别(退出状态)代码的数组
管道在前台运行。

PPID shell 的父进程 ID。

PS1 交互式 shell 的主要提示。 参数、命令和算术
执行替换,并且“!” 替换为当前命令
号码(见 fc 命令如下)。 字面上的“!” 可以放在提示中
放置'!!' 在 PS1 中。

非 root 用户的默认提示是“$”,root 用户的默认提示是“#”。 如果 姆克什 is
由 root 和 PS1 调用不包含“#”字符,默认值
即使环境中已经存在 PS1,也会使用。

姆克什 分发带有样本 .mkshrc 包含一个复杂的
示例,但您可能会喜欢以下示例(请注意
${HOSTNAME:=$(hostname)} 和 root-vs-user 区别子句是(在
此示例)在 PS1 分配时间执行,而 $USER 和 $PWD 是
转义,因此将在每次显示提示时进行评估):

PS1='${USER:=$(id -un)}'"@${HOSTNAME:=$(hostname)}:\$PWD $(
如果 (( USER_ID )); 然后打印\$; 否则打印\#; f)”

请注意,由于命令行编辑器试图找出提示的时间长度
是(所以他们知道距离屏幕边缘有多远),转义码
提示往往会把事情搞砸。 你可以告诉 shell 不要计算某些
序列(例如转义码)通过在提示前添加一个字符
(例如Ctrl-A)后跟一个回车,然后分隔转义
带有此字符的代码。 提示中该字符的任何出现都是
未打印。 顺便说一句,不要因为这次黑客攻击而责怪我; 它来源于
原版的 克什88(1),它确实打印了分隔符,所以你没有
如果您没有任何非打印字符,请走运。

由于反斜杠和其他特殊字符可能会被 shell 解释,
设置 PS1 要么转义反斜杠本身,要么使用双引号。 这
后者更实用。 这是一个更复杂的例子,避免直接
输入特殊字符(例如 ^V 在 emacs 编辑模式下),其中
以反向视频嵌入当前工作目录(颜色会起作用,
太),在提示字符串中:

x=$(打印\\001)
PS1="$x$(print \\r)$x$(tput so)$x\$PWD$x$(tput se)$x>"

由于 David G. Korn 的强烈建议, 姆克什 现在也支持
以下表格:

PS1=$'\1\r\1\e[7m\1$PWD\1\e[0m\1> '

PS2 辅助提示字符串,默认为 '> ',在需要更多输入时使用
完成一个命令。

使用的 PS3 提示 选择 读取菜单选项时的语句。 默认的
是 '#? '。

PS4 用于在执行跟踪期间打印的命令的前缀(请参阅
-x 命令如下)。 参数、命令和算术替换是
在打印之前执行。 默认值为“+”。 你可能想设置它
改为 '[$EPOCCHREALTIME] ',以包含时间戳。

PWD 当前工作目录。 如果 shell 不知道,则可能未设置或为 NULL
在哪儿。

RANDOM 每次引用 RANDOM 时,都会为其分配一个介于 0 到 32767 之间的数字
首先来自线性同余 PRNG。

REPLY 的默认参数 如果没有给出名称,则命令。 也用于
选择 循环存储从标准输入读取的值。

SECONDS 自 shell 启动以来的秒数,或者,如果参数已被
分配了一个整数值,自分配以来的秒数加上
分配的值。

TMOUT 如果在交互式 shell 中设置为正整数,则指定最大
打印主要内容后,shell 将等待输入的秒数
提示 (PS1)。 如果超过时间,shell 将退出。

TMPDIR 创建临时 shell 文件的目录。如果没有这个参数
设置或不包含可写目录的绝对路径,临时
文件是在 / tmp目录.

USER_ID shell 的有效用户 ID。

波浪号 扩张
与参数替换并行完成的波浪号扩展是在单词上完成的
以不带引号的 '~' 开头。 波浪号后面的字符,直到第一个“/”,如果
any,假定为登录名。 如果登录名为空、“+”或“-”,则
HOME、PWD 或 OLDPWD 参数分别被替换。 否则,密码
文件搜索登录名,波浪号表达式替换为用户的
主目录。 如果在密码文件中找不到登录名,或者如果有任何引用或
参数替换发生在登录名中,不执行替换。

在参数赋值中(例如那些在简单命令之前的或者出现在
论据 别号, 出口, 全球化, 只读排版), 波浪号展开后完成
任何赋值(即在等号之后)或在不带引号的冒号(':')之后; 登录名
也由冒号分隔。

先前扩展的登录名的主目录被缓存并重新使用。 这 别号 -d
命令可用于列出、更改和添加到此缓存(例如 别号 -d
fac=/usr/本地/设施; cd 〜fac/bin).

支撑 扩张 (交替)
大括号表达式采用以下形式:

字首{str1,...,字符串}后缀

表达式扩展为 N 单词,每个单词都是连接的 字首, STRi,
后缀 (例如,“a{c,b{X,Y},d}e”扩展为四个词:“ace”、“abXe”、“abYe”和“ade”)。
如示例中所述,大括号表达式可以嵌套,结果单词不是
排序。 大括号表达式必须包含一个未加引号的逗号 (',') 以进行扩展(例如
{}{富} 不展开)。 参数替换后进行大括号扩展
并在文件名生成之前。

文件 姓名 模式
文件名模式是包含一个或多个未加引号的“?”、“*”、“+”、“@”或“!”的单词。
字符或“[..]”序列。 一旦执行了大括号扩展,shell 将替换
文件名模式与所有匹配该模式的文件的排序名称(如果没有
文件匹配,单词保持不变)。 图案元素具有以下含义:

? 匹配任何单个字符。

* 匹配任何八位字节序列。

[..] 匹配括号内的任何八位字节。 八位字节的范围可以通过以下方式指定
用“-”分隔两个八位字节(例如“[a0-9]”匹配字母“a”或任何数字)。
为了表示自己,必须引用“-”或第一个或最后一个八位字节
在八位字节列表中。 同样,一个 ']' 必须被引用或列表中的第一个八位字节
如果是代表自己而不是列表的末尾。 也 '!' 出现
在列表的开头有特殊含义(见下文),所以代表它自己
必须被引用或出现在列表的后面。

[!..] 与 [..] 类似,除了它匹配不在括号内的任何八位字节。

*(模式|...|模式)
匹配任何匹配指定的零次或多次出现的八位字节串
模式。 示例:模式 *(富|酒吧) 匹配字符串“”,“foo”,“bar”,
“foobarfoo”等

+(模式|...|模式)
匹配与指定的一个或多个匹配项匹配的任何八位字节串
模式。 示例:模式 +(富|酒吧) 匹配字符串“foo”、“bar”、
“foobar”等

?(模式|...|模式)
匹配空字符串或匹配指定模式之一的字符串。
示例:模式 ?(富|酒吧) 只匹配字符串“”、“foo”和“bar”。

@(模式|...|模式)
匹配与指定模式之一匹配的字符串。 示例:模式
@(富|酒吧) 只匹配字符串“foo”和“bar”。

!(模式|...|模式)
匹配与指定模式之一不匹配的任何字符串。 示例:
模式 !(富|酒吧) 匹配除“foo”和“bar”之外的所有字符串; 模式 !(*)
不匹配任何字符串; 模式 !(?)* 匹配所有字符串(想想看)。

请注意,复杂的 globbing,尤其是使用替代方法时,速度很慢; 使用单独的
比较可能(也可能不会)更快。

需要注意的是 姆克什 (和 PDKSH) 从不匹配 '.' 和“..”,但 AT&T UNIX KSH, 伯恩 sh, 和 GNU
打坏 的事。

请注意,上述模式元素中没有一个与 a 开头的句点 ('.') 匹配
文件名或斜线 ('/'),​​即使它们在 [..] 序列中明确使用; 此外,该
名称'.' 和 '..' 永远不会匹配,即使是模式 '.*'。

如果 标记目录 选项设置后,任何由文件名生成产生的目录都是
用尾随的“/”标记。

输入输出 重定向
当一个命令被执行时,它的标准输入、标准输出和标准错误(文件
描述符 0、1 和 2,分别)通常是从 shell 继承的。 三
对此的例外是管道中的命令,对于这些命令,标准输入和/或标准
输出是由管道设置的那些,在作业控制时创建的异步命令
禁用,其标准输入最初设置为来自 的/ dev / null的, 和命令
指定了以下任何重定向:

>文件 标准输出重定向到 文件。 如果 文件 不存在,它被创造;
如果它确实存在,则是一个常规文件,并且 无声无息 选项已设置,错误
发生; 否则,文件将被截断。 请注意,这意味着命令 CMD
<富 >富 会打开的 FOO 用于阅读,然后在打开时截断它
写作,之前 CMD 有机会真正阅读 FOO.

>|文件 与...一样 >, 除非文件被截断,即使 无声无息 选项已设置。

>>文件 与...一样 >,除非 文件 存在它被附加到而不是被截断。
此外,文件以追加模式打开,因此写入总是到
文件(见 打开(2))。

<文件 标准输入重定向自 文件,这是打开阅读。

<>文件 与...一样 <, 除非文件被打开进行读写。

<<标记 在阅读了包含这种重定向的命令行(称为
“here document”),shell 将命令源中的行复制到
临时文件直到行匹配 标记 已读。 当命令是
执行后,标准输入从临时文件重定向。 如果 标记
不包含带引号的字符,处理临时文件的内容
好像每次执行命令时都用双引号括起来,所以参数,
命令和算术替换与反斜杠​​ ('\') 一起执行
转义 '$'、'`'、'\' 和 '\newline',但不转义 '"'。如果这里有多个
文档在同一命令行上使用,它们按顺序保存。

如果不 标记 给出,此处文档在下一个结束 << 和替代
将被执行。 如果 标记 只是一组单“''”或双'""'
引号中间没有任何内容,此处文档在下一个空行处结束
并且不会执行替换。

<<-标记 与...一样 <<,除了前导标签从此处文档中的行中剥离。

<< 与...一样 <<,除了 is 这里的文件。 这被称为这里
字符串。

<&fd 标准输入从文件描述符复制 fd. fd 可以是数字,
指示现有文件描述符的编号; 字母“p”,表示
与当前协同进程的输出相关联的文件描述符; 或者
字符“-”,表示要关闭标准输入。 注意 fd is
在大多数 shell 实现中仅限于一位数。

>&fd 与...一样 <&, 除了操作是在标准输出上完成的。

&>文件 与...一样 >文件 2>&1. 这是一个不推荐使用的(遗留的)GNU 打坏 支持扩展
by 姆克什 它还支持前面的显式 fd 编号,例如,
3&>文件 是相同的 3>文件 2>&3 in 姆克什 但是 GNU 中的语法错误 打坏.

&>|文件,&>>文件, &>&fd
与...一样 >|文件, >>文件>&fd,其次是 2>&1, 如上。 这些是 姆克什
扩展。

在上述任何重定向中,重定向的文件描述符(即标准
输入或标准输出)可以通过在重定向前面加上一个数字来明确给出
(可移植,只有一个数字)。 参数、命令和算术替换,波浪号
替换和(如果 shell 是交互式的)文件名生成都在
文件, 标记fd 重定向的参数。 但是,请注意,任何结果
文件名生成仅在匹配单个文件时使用; 如果多个文件匹配,则
使用带有扩展文件名生成字符的单词。 注意在受限
shell,不能使用可以创建文件的重定向。

对于简单命令,重定向可能出现在命令的任何位置; 对于复合命令
(if 语句等),任何重定向都必须出现在末尾。 重定向已处理
在创建管道并按照它们给出的顺序之后,因此以下将打印一个
带有行号的错误:

$ cat /foo/bar 2>&1 >/dev/null | pr -n -t

I/O 重定向创建的文件描述符是 shell 私有的。

算术 表达式
整数算术表达式可以与 命令,在 $((..)) 表达式中,
内部数组引用(例如 姓名[表达式]),作为数字参数 test 命令,并作为
赋值给整数参数的值。 警告: 这也影响隐式
转换为整数,例如由 命令。 从来没有 使用未经检查的用户
输入,例如来自环境,算术!

表达式是使用有符号算术计算的,并且 mksh_ari_t 类型(一个 32 位有符号
整数),除非它们以唯一的“#”字符开头,在这种情况下它们使用 mksh_uari_t (a
32 位无符号整数)。

表达式可能包含字母数字参数标识符、数组引用和整数
常量并且可以与以下 C 运算符组合(在
优先级递增):

一元运算符:

+ - ! ~++--

二进制运算符:

,
= += -= *= /= %= <<<= >>>= <<= >>= &= ^= |=
||
&&
|
^
&
==!=
<<=>> =
<<< >>> << >>
+ -
* /%

三元运算符:

?:(优先级立即高于赋值)

分组运算符:

()

整数常量和表达式是使用 32 位宽、有符号或
无符号,在整数溢出时带有无声环绕的类型。 整数常量可能是
使用符号以任意基数指定 基地#,其中 基地 是十进制
指定基数的整数,和 是指定基数中的数字。 此外,
base-16 整数可以通过在它们前面加上 '0x'(不区分大小写)来指定
算术表达式的形式,除了作为数字参数 test 内置命令。
以唯一数字零 ('0') 为前缀的数字不会导致解释为八进制,因为
这样做是不安全的。

作为特别 姆克什 扩展,以一为基数的数字被视为任一(8 位
透明) ASCII 或 Unicode 代码点,取决于 shell 的 utf8 模式 标志(当前
环境)。 AT&T UNIX 克什93 也支持“'x'”而不是“1#x”的语法。 笔记
不能使用 NUL 字节(整数值为零)。 未设置或空参数
在整数上下文中计算为 0。 在 Unicode 模式下,原始八位字节被映射到范围
EF80..EFFF 与 OPTU-8 中的一样,它在 PUA 中并且已由 CSUR 分配用于此用途。 如果
ASCII 模式中的多于一个八位字节,或多于一个八位字节的序列未形成有效
并且传递了最小的 CESU-8 序列,行为未定义(通常,shell 中止
解析错误,但很少会成功,例如在序列 C2 20) 上。 这就是为什么你
应该始终使用 ASCII 模式,除非您知道输入是格式良好的 UTF-8
如果您使用此功能,则范围为 0000..FFFD,而不是 -a.

运算符的评估如下:

一元 +
结果是参数(包括在内是为了完整性)。

一元 -
否定。

! 逻辑非; 如果参数为零,则结果为 1,否则为 0。

~算术(按位)非。

++ 增量; 必须应用于参数(不是文字或其他表达式)。
参数加1。当用作前缀运算符时,结果
是参数的增量值; 当用作后缀运算符时,
结果是参数的原始值。

- 相似 ++,除了参数减1。

, 分隔两个算术表达式; 首先评估左侧,
然后是正确的。 结果是右侧表达式的值
侧。

= 赋值; 左边的变量设置为右边的值。

+= -= *= /= %= <<<= >>>= <<= >>= &= ^= |=
赋值运算符。VAR><op>=表达式> 是一样的VAR>=VAR><op><表达式>,
具有任何运算符优先级表达式> 保存。 例如,“var1 *= 5 +
3”与指定“var1 = var1 * (5 + 3)”相同。

|| 逻辑或; 如果任一参数非零,则结果为 1,否则为 0。 这
仅当左参数为零时才计算右参数。

&& 逻辑与; 如果两个参数都不为零,则结果为 1,否则为 0。 这
仅当左参数不为零时才计算右参数。

| 算术(按位)或。

^ 算术(按位)异或(异或)。

& 算术(按位)AND。

== 相等; 如果两个参数相等,则结果为 1,否则为 0。

!= 不相等; 如果两个参数相等,则结果为 0,否则为 1。

< 小于; 如果左边的参数小于右边的结果是 1,如果是 0
不是。

<= > >=
小于或等于、大于、大于或等于。 看 <.

<<< >>>
向左(向右)旋转; 结果类似于 shift(见 <<) 除了
在一端移出的位在另一端移入,而不是零
或符号位。

<< >> 左移(右移); 结果是左参数,其位左移
(正确)按正确参数中给出的数量。

+ - * /
加法、减法、乘法和除法。

% 余数; 结果是左除法的对称余数
权利的论据。 要获得“a”的数学模数 MOD b”,使用
公式“(a % b + b) % b”。

<参数1>?参数2>:参数3>
如果参数1> 非零,结果为参数2>; 否则结果是参数3>.
不评估非结果参数。

协程
协同进程(它是使用“|&”运算符创建的管道)是一个异步进程
shell 都可以写入(使用 打印 -p) 并从中读取 (使用 -p)。 输入
协同过程的输出也可以使用 >&p<&p 重定向,
分别。 一旦启动了一个协程,另一个协程就不能启动,直到协程
进程退出,或者直到协同进程的输入已使用 EXEC n>&p
重定向。 如果一个协程的输入以这种方式重定向,下一个协程是
开始将与第一个协程共享输出,除非初始协程的输出
协同进程已使用 EXEC n<&p 重定向。

关于协程的一些注意事项:

· 关闭协同进程的输入(因此协同进程读取文件结尾)的唯一方法是
将输入重定向到编号的文件描述符,然后关闭该文件描述符:
EXEC 3>&p; EXEC 3>&-

· 为了让协同进程共享一个公共输出,shell 必须保持写
部分输出管道打开。 这意味着直到文件结束才会被检测到
所有共享协同进程输出的协同进程都已经退出(当它们都退出时,
shell 关闭它的管道副本)。 这可以通过将输出重定向到
编号的文件描述符(因为这也会导致 shell 关闭其副本)。 注意
此行为与关闭其副本的原始 Korn shell 略有不同
最近启动的协同处理时协同处理输出的写入部分
(而不是在所有共享协进程时)退出。

· 打印 -p 如果信号未被捕获或在写入期间忽略 SIGPIPE 信号
忽略; 如果协同处理输入已复制到另一个文件,则同样如此
描述符和 打印 -un 用来。

主要工作内容
使用任一 Korn shell 定义函数 功能 函数名 语法或
Bourne/POSIX 外壳 函数名() 语法(两者的区别见下文
形式)。 函数就像 .‐scripts(即使用 '.' 内置的脚本)
它们在当前环境中执行。 然而,与 .-scripts 不同的是,shell 参数
(即位置参数 $1、$2 等)在它们内部永远不可见。 当外壳是
确定命令的位置,在特殊内置后搜索函数
命令,在内置命令和 PATH 被搜索之前。

可以使用删除现有功能 未设定 -f 函数名. 函数列表可以
使用 排版 +f 并且可以使用列出函数定义 排版 -f.
自动加载 命令(这是一个别名 排版 fu) 可用于创建未定义
函数:当一个未定义的函数被执行时,shell 搜索指定的路径
与函数同名的文件的 FPATH 参数,如果找到,则读取
并被执行。 如果在执行文件后发现定义了命名函数,则
函数被执行; 否则,继续正常的命令搜索(即 shell
搜索常规的内置命令表和 PATH)。 注意如果没有找到命令
使用 PATH,尝试使用 FPATH 自动加载函数(这是一个未记录的
原始 Korn shell 的特征)。

函数可以有两个属性,“trace”和“export”,可以用 排版 英尺
排版 -fx, 分别。 当执行跟踪的函数时,shell 的 跟踪
选项在函数的持续时间内打开。 函数的“export”属性是
目前未使用。 在原始 Korn shell 中,导出的函数对 shell 可见
执行的脚本。

由于函数是在当前 shell 环境中执行的,因此进行了参数分配
内部函数在函数完成后可见。 如果这不是想要的
效果, 排版 命令可以在函数内部使用以创建局部参数。 笔记
那个 AT&T UNIX 克什93 使用静态作用域(一个全局作用域,每个函数一个局部作用域)
并且只允许在 Korn 风格的函数上使用局部变量,而 姆克什 使用动态范围
(不同地区的嵌套范围)。 请注意特殊参数(例如 $$, $!) 不能
范围以这种方式。

函数的退出状态是函数中执行的最后一条命令的退出状态。 一种
可以使用 回报 命令; 这也可以使用
明确指定退出状态。

定义的函数 功能 保留字在下面被区别对待
定义的函数的方法 () 符号:

· $0 参数设置为函数的名称(Bourne 风格的函数保留 $0
原封不动)。

· 函数调用之前的参数赋值不保存在 shell 环境中
(执行 Bourne 风格的函数将保留分配)。

· OPTIND 在进入和退出函数时被保存/重置和恢复,因此 获取选项
在函数内部和外部都正确使用(Bourne 风格的函数离开 OPTIND
未受影响,所以使用 获取选项 在函数内部干扰使用 获取选项 在外面
功能)。

· 外壳选项 ( -o) 具有局部作用域,即函数内部的更改将重置
它的出口。

将来,还可能会添加以下差异:

· 在功能执行期间将使用单独的陷阱/信号环境。 这个
将意味着在函数内设置的陷阱不会影响 shell 的陷阱和信号
在 shell 中没有被忽略(但可能被困)将在
一个函数。

· EXIT 陷阱,如果在函数中设置,将在函数返回后执行。

命令 执行
在评估命令行参数、重定向和参数分配后,
确定命令类型:特殊内置命令、函数、普通内置命令或
使用 PATH 参数找到的要执行的文件的名称。 检查是在
以上顺序。 特殊的内置命令与其他命令的不同之处在于 PATH
参数不用于查找它们,它们执行期间的错误可能导致非
要退出的交互式 shell,以及在命令之前指定的参数分配
命令完成后保留。 常规内置命令的不同之处仅在于
PATH 参数不用于查找它们。

KSH 和 POSIX 有所不同,哪些命令被认为是特殊的或
常规的。

POSIX 特殊的内置实用程序:

., :, 打破, 继续, 评估, EXEC, 出口, 出口, 只读, 回报, , 转移, , 陷阱,
未设定

额外 姆克什 保持分配的命令:

内建的, 全球化, 资源, 排版, 等待

不特殊的内置函数:

[, 别号, bg, 绑定, , cd, 命令, 回音, false, fc, fg, 获取选项, 工作, , , 打印,
PWD, , 实路径, 重命名, 睡觉, 暂停, test, true, 极限, 遮罩, 无别名, 何处

一旦确定了命令的类型,任何命令行参数分配都是
在命令期间执行和导出。

下面介绍特殊和常规的内置命令和builtin-like reserved
话:

. 文件 [ARG ...]
这称为“点”命令。 执行中的命令 文件 在当前
环境。 在 PATH 的目录中搜索该文件。 如果参数是
给定,位置参数可用于访问它们,而 文件 是被
执行。 如果没有给出参数,则位置参数是
命令使用的环境。

: [...]
空命令。 退出状态设置为零。

[ 表达 ]
我们 test.

别号 [-d | -t [-r] | +-x[-p[+[姓名 [=折扣值] ...]
没有争论, 别号 列出所有别名。 对于任何没有值的名称,
列出现有别名。 任何带有值的名称都定义了一个别名(请参阅 别名
以上)。

列出别名时,使用两种格式之一。 通常,别名被列为
姓名=折扣值,其中 折扣值 被引用。 如果选项前面有“+”,或单独的“+”
在命令行上给出,仅 姓名 被打印。

-d 选项导致在波浪号扩展中使用的目录别名被列出
或设置(见 波浪号 扩张 以上)。

如果 -p 选项,每个别名都以字符串“alias”为前缀。

-t 选项指示要列出/设置跟踪的别名(指定的值
命令行上的跟踪别名将被忽略)。 这 -r 选项表示
所有跟踪的别名都将被重置。

-x 选项集(+x 清除)别名的导出属性,或者,如果没有名称
给定,列出具有导出属性的别名(导出别名没有
影响)。

bg [工作 ...]
在后台恢复指定的停止作业。 如果没有指定工作, %+
假设。 看 工作 控制 了解更多信息。

绑定 [-l]
列出当前绑定。 如果 -l 给了旗子, 绑定 而是列出
键可以绑定的函数的名称。 看 Emacs的 编辑 模式 更多
信息。

绑定 [-m] 绳子=[替代] ...
绑定 绳子=[编辑命令] ...
指定的编辑命令绑定到给定的 绳子,它应该由一个
控制字符可选地前面有两个前缀字符之一和
可选地后接波浪号字符。 未来的投入 绳子 会导致
要立即调用的编辑命令。 如果 -m 给定标志,指定的
输入 绳子 之后将立即被给定的替换 替代 绳子
其中可能包含编辑命令,但不包含其他宏。 如果波浪号后缀是
给定,一两个前缀后面的波浪号和控制字符被忽略,
之后将处理任何其他尾随字符。

控制字符可以使用插入符号书写,即 ^X 代表 Ctrl-X。
请注意,虽然只支持两个前缀字符(通常是 ESC 和 ^X),
可以支持一些多字符序列。

以下默认绑定显示方向键、home、end 和 delete 键如何
在 BSD wsvt25 上,xterm-xfree86 或 GNU screen 终端是绑定的(当然有些
转义序列不会很好地解决这个问题):

绑定 '^X'=prefix-2
绑定 '^[['=prefix-2
绑定 '^XA'=up-history
绑定 '^XB'=down-history
绑定 '^XC'=forward-char
绑定 '^XD'=backward-char
绑定 '^X1~'=beginning-of-line
绑定 '^X7~'=beginning-of-line
绑定'^XH'=行首
绑定'^X4~'=行尾
绑定'^X8~'=行尾
绑定'^XF'=行尾
绑定 '^X3~'=delete-char-forward

打破 [水平]
退出 水平最里面的 , 选择, 直到 环。 水平 默认为 1。

内建的 [--] 命令 [ARG ...]
执行内置命令 命令.

[-u[文件 ...]
按命令行顺序顺序读取文件,并将它们写入标准输出。
如果一个 文件 是单个破折号 ('-') 或不存在,从标准输入读取。 对于直接
内置调用,POSIX -u 选项作为无操作支持。 对于来自 shell 的调用,如果
给出任何选项,一个外部 (1) 实用程序优于内置程序。

cd [-L[DIR]
cd -P [-e[DIR]
目录 [-eLP[DIR]
将工作目录设置为 DIR. 如果设置了参数 CDPATH,它会列出
包含目录的搜索路径 DIR. NULL 路径表示当前
目录。 如果 DIR 在 CDPATH 搜索路径的任何组件中找到,而不是
NULL 路径,新工作目录的名称将写入标准输出。
If DIR 丢失,使用主目录 HOME。 如果 DIR 是'-',前一个
使用工作目录(请参阅 OLDPWD 参数)。

如果 -L 选项(逻辑路径)被使用,或者如果 选项未设置(请参阅
下面的命令),对“..”的引用 DIR 相对于用于到达的路径
目录。 如果 -P 选项(物理路径)被使用,或者如果 选项是
set, '..' 是相对于文件系统目录树的。 PWD 和 OLDPWD
更新参数以反映当前和旧的工作目录,
分别。 如果 -e 选项设置为物理文件系统遍历,和 PWD
无法设置,退出码为1; 如果发生错误,则大于 1,则为 0
除此以外。

cd [-eLP]
目录 [-eLP]
字符串 替代 在当前目录中,和shell
尝试更改到新目录。

命令 [-pVv] CMD [ARG ...]
如果既不 -v 也不 -V 给出了选项, CMD 就像执行一样 命令 民政事务总署
未指定,但有两个例外:首先, CMD 不能是 shell 函数; 和
其次,特殊的内置命令失去了它们的特殊性(即重定向和
实用程序错误不会导致 shell 退出,并且不会导致命令分配
永恒的)。

如果 -p 给出选项,使用默认搜索路径而不是当前值
PATH 的实际值取决于系统。

如果 -v 给出选项,而不是执行 CMD,有关将是什么的信息
已执行(并且对 ARG ...)。 对于内置函数、函数和
关键字,他们的名字被简单地打印出来; 对于别名,定义它们的命令是
打印; 对于通过搜索 PATH 参数找到的实用程序,
命令被打印出来。 如果没有找到命令(即路径搜索失败),则什么也没有
印刷并 命令 以非零状态退出。 这 -V 选项就像 -v
选项,除了它更冗长。

继续 [水平]
跳转到开头 水平最里面的 , 选择, 直到 环。
水平 默认为 1。

回音 [-一个[ARG ...]
警告: 此实用程序不可移植; 使用内置的 Korn shell 打印 代替。

将其参数(以空格分隔)后跟一个换行符打印到标准
输出。 如果任何参数包含反斜杠,则换行符将被取消
序列'\c'。 见 打印 下面的命令以获取其他反斜杠序列的列表
被认可的。

提供这些选项是为了与 BSD shell 脚本兼容。 这 -n 选项
抑制尾随的换行符, -e 启用反斜杠解释(无操作,因为
这通常是这样做的),和 -E 禁止反斜杠解释。

如果 POSIX or sh 选项被设置或者这是一个直接的内置调用,只有第一个
参数被视为一个选项,并且仅当它恰好是“-n”。 反斜杠
翻译被禁用。

评估 命令 ...
参数连接起来(它们之间有空格)形成一个字符串
然后 shell 解析并在当前环境中执行。

EXEC [-a 精氨酸0[-c[命令 [ARG ...]]
命令执行时无需fork,替换shell进程。 这是
当前是绝对的,即 EXEC 永远不会回来,即使 命令 没有找到。 这
-a 选项允许设置不同的 argv[0] 值,以及 -c 清除环境
在执行子进程之前,_变量和直接赋值除外。

如果除了 I/O 重定向之外没有给出任何命令,则 I/O 重定向是永久性的
并且不更换外壳。 打开的任何大于 2 的文件描述符
or DUP(2) 以这种方式不能被其他执行的命令使用(即
非内置于 shell 的命令)。 请注意,Bourne shell 有所不同
这里; 它确实传递了这些文件描述符。

出口 [状态]
shell 以指定的退出状态退出。 如果 状态 未指定,退出
status 是当前的值 $? 参数。

出口 [-p[参数[=折扣值]]
设置命名参数的导出属性。 导出的参数传入
执行命令的环境。 如果指定了值,则命名参数
也被分配。

如果没有指定参数,所有设置了导出属性的参数都是
每行打印一个; 他们的名字,或者,如果没有选项字母的“-”是
指定,名称=值对,或者,与 -p, 出口 适合重新进入的命令。

false 以非零状态退出的命令。

fc [-e 编辑 | -l [-n]][-r[第一 [最后]]
第一最后 从历史记录中选择命令。 可以通过历史选择命令
数字(负数从当前、最近的行开始倒退)或
指定以该字符串开头的最新命令的字符串。 这 -l 选项
列出标准输出上的命令,以及 -n 禁止默认命令编号。
-r 选项颠倒列表的顺序。 没有 -l, 选择的命令是
由指定的编辑器编辑 -e 选项,或者如果没有 -e 被指定,
由 FCEDIT 参数指定的编辑器(如果未设置此参数, /斌/编辑 is
使用),然后由 shell 执行。

fc -e - | -s [-g[=[字首]
执行后重新执行选中的命令(默认为上一个命令)
可选替换 。 如果 -g 被指定,所有出现的
被替换为 . 的意思 -e --s 是相同的:重新执行
在不调用编辑器的情况下选择命令。 此命令通常使用
预定义: 别号 r='fc -e -'

fg [工作 ...]
在前台恢复指定的作业。 如果没有指定工作, %+ is
假定。 看 工作 控制 了解更多信息。

获取选项 选择字符串 姓名 [ARG ...]
shell 过程使用它来解析指定的参数(或位置参数,
如果没有给出参数)并检查合法选项。 选择字符串 包含
选项字母 获取选项 是认识。 如果一个字母后跟一个冒号,则
option 预计会有一个参数。 不带参数的选项可能是
分组在一个参数中。 如果一个选项接受一个参数并且选项
字符不是找到它的参数的最后一个字符,其余的
该参数被视为选项的参数; 否则,下一个参数是
选项的参数。

每一次 获取选项 被调用,它将下一个选项放在 shell 参数中 姓名
以及下一次调用要处理的参数的索引 获取选项 ,在
shell 参数 OPTIND。 如果选项是用“+”引入的,则选项放置
in 姓名 以“+”为前缀。 当一个选项需要一个参数时, 获取选项 地方
它在 shell 参数 OPTARG 中。

当遇到非法选项或缺少选项参数时,问号
或冒号放在 姓名 (表示非法选项或缺少参数,
分别)和 OPTARG 设置为导致问题的选项字符。
此外,如果 选择字符串 不以冒号开头,问号放在
姓名, OPTARG 未设置,并且将错误消息打印到标准错误。

当遇到选项的结尾时, 获取选项 以非零退出退出
地位。 选项在未开始的第一个(非选项参数)参数处结束
使用“-”,或遇到“--”参数时。

选项解析可以通过将 OPTIND 设置为 1 来重置(这是自动完成的)
每当调用 shell 或 shell 过程时)。

警告:将 shell 参数 OPTIND 的值更改为 1 以外的值,或
在不重置 OPTIND 的情况下解析不同的参数集,可能会导致意外
结果。

全球化 ...
我们 排版.

哈希 [-r[姓名 ...]
如果没有参数,则列出任何散列的可执行命令路径名。 这 -r 选项
导致所有散列命令从散列表中删除。 每个 姓名 被搜索
就好像它是一个命令名称并添加到哈希表中,如果它是一个可执行文件
命令。

工作 [-lnp[工作 ...]
显示有关指定作业的信息; 如果没有指定工作,则所有工作
显示。 这 -n 选项会导致仅显示作业的信息
自上次通知以来已更改状态。 如果 -l 选项被使用,
还列出了作业中每个进程的进程 ID。 这 -p 选项仅导致
要打印的每个作业的进程组。 看 工作 控制 以下为格式 工作
和显示的工作。

[-s 签名 | --信号 | --签名] { 工作 | PID | PGRP } ...
将指定的信号发送到指定的作业、进程 ID 或进程组。 如果
未指定信号,则发送 TERM 信号。 如果指定了作业,则信号
发送到作业的进程组。 看 工作 控制 以下为格式 工作.

-l [退出状态 ...]
打印对应的信号名称 退出状态. 如果没有指定参数,则一个
打印了所有信号的列表、它们的编号以及它们的简短描述。

[表达 ...]
每个表达式都被评估(见 算术 表达式 以上)。 如果所有表达式
成功求值,如果最后一个表达式求值,则退出状态为 0 (1)
到非零(零)。 如果在解析或评估一个
表达式,退出状态大于 1。由于表达式可能需要
引用, (( 表达式 )) 是 { let ' 的语法糖表达式'; }.

让] 内部使用的别名 .

米诺德 [-m 模式] 姓名 b|c 主要 未成年人
米诺德 [-m 模式] 姓名 p
创建设备专用文件。 文件类型可能是 b (块类型设备), c
(字符类型设备),或 p (命名管道,先进先出)。 创建的文件可能会被修改
根据其 模式 (通过 -m 选项), 主要 (主要设备编号),以及 未成年人
(次要设备号)。 这通常不是 姆克什; 然而,分销商可能
已将此作为内置功能添加为速度黑客。

打印 [-nprsu[n] | -R [-en]][论点 ...]
打印 在标准输出上打印其参数,以空格分隔并终止
换行。 这 -n 选项禁止换行。 默认情况下,某些 C 转义
被翻译。 这些包括在 反斜杠 扩张 以上,还有
作为 '\c',相当于使用 -n 选项。 反斜杠扩展可能是
被抑制 -r 选项。 该 -s 选项打印到历史文件而不是
标准输出; 这 -u 选项打印到文件描述符 n (n 默认为 1 如果
省略); 和 -p 选项打印到协同进程(请参阅 协程 以上)。

-R 选项用于在某种程度上模拟 BSD 回音(1) 执行的命令
不处理 '\' 序列,除非 -e 给出了选项。 如上所述, -n 选项
抑制尾随的换行符。

的printf 格式 [参数 ...]
格式化输出。 大约与上图相同 的printf(1)、效用,除非它使用
相同 反斜杠 扩张 和 I/O 代码并且不处理浮点作为
余下的 姆克什. 外部实用程序比内置实用程序更受欢迎。 这不是
通常的一部分 姆克什; 但是,分销商可能已将其添加为内置
速度黑客。 不要在新代码中使用。

PWD [-LP]
打印当前工作目录。 如果 -L 选项被使用,或者如果
选项未设置(请参阅 下面的命令),打印逻辑路径(即
路径曾经 cd 到当前目录)。 如果 -P 使用选项(物理路径)
或者如果 选项被设置,从文件系统确定的路径(通过
下面的“..”目录到根目录)被打印出来。

[-A | -a[-d x[-N z | -n z[-p | -u[n]][-t n[-rs[p ...]
读取一行输入,使用 IFS 参数将输入分隔为字段(请参阅
换人 以上),并将每个字段分配给指定的参数 p。 如果不
指定参数,REPLY 参数用于存储结果。 随着
-A-a 选项,只接受一个或一个参数。 如果还有更多
参数比字段,额外的参数设置为空字符串或0; 如果
字段比参数多,最后一个参数分配给剩下的
字段(包括单词分隔符)。

选项如下:

-A 将结果存入参数 p (或 REPLY)作为单词数组。

-a 将结果不分词存入参数 p (或回复)作为
字符数组(宽字符,如果 utf8 模式 选项被制定,
否则八位字节); 默认情况下,代码点被编码为十进制数字。

-d x 使用第一个字节 x, NUL 如果为空,而不是 ASCII 换行符
作为输入行分隔符。

-N z 不要一直读到行尾,而是准确地读 z 字节。 如果 EOF 或
超时发生,部分读取返回,退出状态为 1。

-n z 不要读到行尾,而是读到 z 字节,但尽快返回
读取任何字节,例如从慢速终端设备,或者如果 EOF 或超时
发生。

-p 从当前活动的协同进程中读取,请参阅 协程 以上为详情
就此而言。

-u[n] 从文件描述符中读取 n (默认为 0,即标准输入)。 这
参数必须紧跟在选项字符之后。

-t n 中断阅读后 n 秒(指定为正十进制值,带有
可选的小数部分)。 的退出状态 如果超时,则为 1
发生,但仍可能返回部分读取。

-r 通常,ASCII 反斜杠字符会转义
跟随字符并从输入中删除; 不停止时
遇到反斜杠换行序列并且不将该换行存储在
结果。 此选项启用原始模式,其中不使用反斜杠
处理。

-s 输入行被保存到历史记录中。

如果输入是终端,则 -N-n 选项将其设置为原始模式; 他们
如果 -1 作为传递,则读取整个文件 z 论据。

第一个参数可能有一个问号和一个附加的字符串,其中
如果字符串用作提示(在任何输入之前打印到标准错误
读)如果输入是 TTY(4) (例如 nfoo?'编号 of 福斯: ').

如果未读取输入或发生超时, 以非零状态退出。

另一个方便的技巧:如果 在循环中运行,例如 富; do ...;
完成 然后将删除前导空格(IFS)并处理反斜杠。 你
可能想要使用 国际金融中心= -r 富; do ...; 完成 用于原始 I/O。 相似地,
使用时 -a 选项,使用 -r 选择可能是谨慎的; 同样适用
为:

找 。 -type f -print0 |& \
而 IFS= 读取 -d '' -pr 文件名; 做
打印 -r -- "找到 <${filename#./}>"
完成

内循环将在子shell中执行,不能更改变量
如果在管道中执行,则传播:

酒吧| 巴兹| 读 foo 时; 做 ...; 完毕

改用协同进程:

酒吧| 巴兹|&
读时 -p foo; 做 ...; 完毕
执行 3>&p; 执行 3>&-

只读 [-p[参数 [=折扣值] ...]
设置命名参数的只读属性。 如果给定值,
在设置属性之前为它们设置参数。 一旦设定了参数
只读,不能取消设置,也不能更改其值。

如果不指定参数,则所有参数的名称带有只读
属性每行打印一个,除非 -p 选项被使用,在这种情况下
只读 定义所有只读参数(包括它们的值)的命令是
打印。

实路径 [--] 姓名
打印对应的解析绝对路径名 姓名。 如果 姓名 以一个结尾
斜线('/'),它还检查是否存在以及它是否是目录;
除此以外, 实路径 如果路径名存在或可以创建,则返回 0
立即,即除了最后一个组件之外的所有组件都存在并且是目录。

重命名 [--]
重命名文件 . 两者都必须是完整的路径名并且在同一设备上。
此内置函数用于紧急情况,其中 /bin/mv 变得无法使用,并且
直接调用 重命名(2)。

回报 [状态]
从函数返回或 . 脚本,退出状态 状态。 如果不 状态 给出,
使用上次执行命令的退出状态。 如果在函数之外使用
or . 脚本,它具有相同的效果 出口。 注意 姆克什 处理个人资料和
ENV 文件为 . 脚本,而原始的 Korn shell 仅将配置文件视为 .
脚本。

[+-abCefhiklmnprsUuvXx[+-o 选项[+-A 姓名[--[ARG ...]
命令可用于设置 (-) 或清除 (+) shell 选项,设置位置
参数,或设置数组参数。 可以使用 +-o 选项
语法,其中 选项 是选项的长名称,或使用 +-邮件 句法,
哪里 邮件 是选项的单字母名称(并非所有选项都有单字母
姓名)。 下表列出了选项字母(如果存在)和长名称
以及选项功能的描述:

-A 姓名
设置数组参数的元素 姓名ARG ... If -A 使用,
数组首先被重置(即清空); 如果 +A 使用时,设置前 N 个元素
(其中 N 是参数的数量); 其余的保持不变。

命令的替代语法 -A FOO -- a b c 这是兼容的
GNU 打坏 并且还受 AT&T UNIX 支持 克什93 是: 富=(一个 b C); 富+=(d e)

-a | -o 出口
所有新参数都是使用导出属性创建的。

-b | -o 通知
异步打印作业通知消息,而不是在
迅速的。 仅在启用作业控制时使用 (-m).

-C | -o 无声无息
防止 > 重定向覆盖现有文件。 相反,>| 必须使用
强制覆盖。 请注意,这不能安全地用于创建
由于允许重定向的检查中的 TOCTOU 导致的临时文件或锁定文件
输出到 的/ dev / null的 或其他设备文件,即使在 无声无息 模式。

-e | -o 错误退出
发生错误或命令时立即退出(在执行 ERR 陷阱后)
失败(即以非零状态退出)。 这不适用于命令
其退出状态由 shell 构造显式测试,例如 if, 直到,
! 声明。 为了 && 或||,只有最后一个命令的状态是
经过测试。

-f | -o 无球
不要扩展文件名模式。

-h | -o 跟踪器
为所有执行的命令创建跟踪别名(请参阅 别名 以上)。 启用
默认用于非交互式 shell。

-i | -o 互动
该外壳是一个交互式外壳。 此选项只能在 shell 时使用
被调用。 有关这意味着什么的说明,请参见上文。

-k | -o 关键词
参数分配可在命令中的任何位置识别。

-l | -o 登录
该外壳是一个登录外壳。 此选项只能在 shell 时使用
调用。 有关这意味着什么的说明,请参见上文。

-m | -o 监控
启用作业控制(交互式 shell 的默认设置)。

-n | -o NOEXEC
不执行任何命令。 用于检查脚本的语法(忽略
如果是互动的)。

-p | -o 特权
shell 是一个特权 shell。 它会自动设置,如果,当外壳
启动时,真实的 UID 或 GID 与有效的 UID (EUID) 或 GID 不匹配
(EGID),分别。 有关这意味着什么的说明,请参见上文。

-r | -o 受限
外壳是受限制的外壳。 此选项只能在 shell 时使用
调用。 有关这意味着什么的说明,请参见上文。

-s | -o 标准输入
如果在调用 shell 时使用,则从标准输入读取命令。 放
如果在没有参数的情况下调用 shell,则自动。

什么时候 -s 命令它导致指定的参数
在将它们分配给位置参数(或数组 姓名如果
-A 用来)。

-U | -o utf8 模式
启用 UTF-8 支持 Emacs的 编辑 模式 和内部字符串处理
职能。 默认情况下禁用此标志,但可以通过设置它来启用
在 shell 命令行上; 为交互式 shell 自动启用,如果
在编译时请求,您的系统支持 设置区域(LC_CTYPE, "") 以及
(可选) nl_语言信息(代码集),或 LC_ALL、LC_CTYPE 或 LANG 环境
变量,其中至少一个返回匹配“UTF-8”或
“utf8”不区分大小写; 对于直接内置调用,取决于
上述环境变量; 或者对于标准输入或脚本,如果输入
以 UTF-8 字节顺序标记开始。

在不久的将来,将实施区域设置跟踪,这意味着 -+U is
只要与 POSIX 语言环境相关的环境变量之一发生变化,就会发生变化。

-u | -o 名词集
引用未设置的参数,而不是“$@”或“$*”,被视为
错误,除非使用了“-”、“+”或“=”修饰符之一。

-v | -o 详细
在读取时将 shell 输入写入标准错误。

-X | -o 标记目录
在文件名生成期间用尾随的“/”标记目录。

-x | -o 跟踪
执行时打印命令树,前面是 PS4 的值。

-o 格尼斯
后台作业以较低的优先级运行。

-o 大括号展开
启用大括号扩展(又名交替)。 这是默认启用的。 如果
禁用,等号后的波浪号扩展被禁用作为副作用。

-o emacs的
启用类似 BRL emacs 的命令行编辑(仅限交互式 shell); 看 Emacs的
编辑 模式.

-o 通用麦克斯
启用类似 gmacs 的命令行编辑(仅限交互式 shell)。 目前
与 emacs 编辑相同,只是 transpose-chars (^T) 的作用很小
不一样。

-o 忽略
读取文件尾时,shell 不会(轻松)退出; 出口 必须使用。
为避免无限循环,如果 EOF 连续读取 13 次,shell 将退出。

-o 继承-xtrace
不要重置 -o 跟踪 进入功能后。 这是默认启用的。

-o 诺哈普
当登录 shell 退出时,不要使用 SIGHUP 信号终止正在运行的作业。
当前默认设置,但将来可能会更改以兼容
使用 AT&T UNIX KSH,它没有这个选项,但确实发送了 SIGHUP
信号。

-o 无日志
没有效果。 在原始的 Korn shell 中,这可以防止函数定义
存储在历史文件中。

-o
导致 cdPWD 使用“物理”(即文件系统)'..' 的命令
目录而不是“逻辑”目录(即外壳处理'..',它
允许用户忽略指向目录的符号链接)。 清除
默认。 请注意,设置此选项不会影响当前的值
密码参数; 只有 cd 命令更改 PWD。 见 cdPWD 命令
以上了解更多详情。

-o 管道故障
使管道的退出状态(在逻辑补充之前)
最右边的非零错误级别,如果所有命令都以零退出,则为零。

-o POSIX
表现得更接近标准(见 POSIX 模式 详情)。 自动地
如果 shell 调用的基本名称以“sh”开头,则启用
自动检测功能是在(不是在 MirBSD 中)编译的。 作为副作用,设置
此标志关闭 大括号展开 模式,可以手动重新打开,以及
sh 模式(除非同时启用两者)。

-o sh
启用 / bin / sh的 (kludge) 模式(见 SH 模式)。 自动启用,如果
shell 调用的基本名称以“sh”开头,并且此自动检测功能
编译在(不是在 MirBSD 中)。 作为副作用,设置此标志会关闭
大括号展开 模式,可以手动重新打开,以及 POSIX 模式(除非
两者同时启用)。

-o vi
启用 vi(1) 类似命令行编辑(仅限交互式 shell)。 看 Vi
编辑 模式 用于文档和限制。

-o 完成
vi命令行编辑中,转义时做命令和文件名补全(^[)
进入命令模式。

-o vi表完成
vi 命令行编辑中,tab (^I) 时,执行命令和文件名补全
进入插入模式。 这是默认设置。

-o 虚拟机
没有效果。 在原始的 Korn shell 中,除非 虚拟机 已设置,vi 命令-
线路模式会让 TTY(4) 驱动程序执行工作直到输入 ESC (^[)。
姆克什 始终处于 viraw 模式。

这些选项也可以在调用 shell 时使用。 目前的一套
选项(带有单个字母名称)可以在参数“$-”中找到。 -o
没有选项名称将列出所有选项以及每个选项是打开还是关闭; +o
打印当前所有选项的长名称。 在未来的版本中,
+o 将行为符合 POSIX 并打印命令以恢复当前选项
代替。

剩余的参数(如果有)是位置参数,并按顺序分配给
位置参数(即 $1、$2 等)。 如果选项以“--”结尾
没有剩余参数,所有位置参数都被清除。 如果没有选项或
给出参数,打印所有名称的值。 对于不为人知的历史
原因,单独的 '-' 选项被特殊对待 - 它清除了 -v-x
选项​​。

转移 []
位置参数 + 1, +2 等被重命名为“1”、“2”等。
默认为 1。

睡觉
暂停执行至少 指定为正十进制值
带有可选的小数部分。 信号传递可以更早地继续执行。

资源 文件 [ARG ...]
喜欢 . (“点”),除了当前工作目录附加到搜索
路径(GNU 打坏 延期)。

暂停
停止 shell,就像它从终端接收到挂起字符一样。 这是
除非父进程是登录 shell 的成员,否则不可能挂起登录 shell
相同的终端会话,但属于不同的进程组。 作为一般
规则,如果 shell 是由另一个 shell 启动的,或者通过 su(1)、可以暂停。

test 表达
[ 表达 ]
test 评估 表达 如果为真则返回零状态,如果为假则返回 1 或更大
如果出现错误,则大于 1。 它通常用作条件命令 if
声明。 所有的都遵循符号链接 文件 表达式除外 -h
-L.

可以使用以下基本表达式:

-a 文件 文件 存在。

-b 文件 文件 是块特殊设备。

-c 文件 文件 是字符专用设备。

-d 文件 文件 是一个目录。

-e 文件 文件 存在。

-f 文件 文件 是一个普通文件。

-G 文件 文件's group 是 shell 的有效组 ID。

-g 文件 文件的模式设置了 setgid 位。

-H 文件 文件 是上下文相关目录(仅在 HP-UX 上有用)。

-h 文件 文件 是一个符号链接。

-k 文件 文件的模式有 (8) 位设置。

-L 文件 文件 是一个符号链接。

-O 文件 文件的所有者是外壳的有效用户 ID。

-o 选项选项 设置(见 命令上面的列表
选项)。 作为非标准扩展,如果选项以
'!',测试被否定; 测试总是失败,如果 选项
不存在(所以 [ -o foo -o -o !foo ] 返回真当且仅
如果选项 FOO 存在)。 同样可以用 [ -o ?foo ] 来实现
就像在 AT&T UNIX 中一样 克什93. 选项 也可以是由
'-' 或 '+'(无逻辑否定),例如 '-x' 或 '+x'
而不是'xtrace'。

-p 文件 文件 是命名管道 (FIFO)。

-r 文件 文件 存在且可读。

-S 文件 文件 是一个 UNIX(4)-域套接字。

-s 文件 文件 不为空。

-t fd 文件描述符 fd 是一个 TTY(4) 装置。

-u 文件 文件的模式设置了 setuid 位。

-w 文件 文件 存在且可写。

-x 文件 文件 存在并且是可执行的。

file1 -nt file2 file1file2 or file1 存在并且 file2 才不是。

file1 -ot file2 file1file2 or file2 存在并且 file1 才不是。

file1 -如果 file2 file1 是同一个文件 file2.

绳子 绳子 具有非零长度。

-n 绳子 绳子 不为空。

-z 绳子 绳子 是空的。

绳子 = 绳子 字符串是相等的。

绳子 == 绳子 字符串是相等的。

绳子 > 绳子 第一个字符串操作数大于第二个字符串操作数。

绳子 < 绳子 第一个字符串操作数小于第二个字符串操作数。

绳子 != 绳子 字符串不相等。

-eq 数字比较相等。

- 是 数字比较不相等。

-ge 数字比较大于或等于。

-gt 数字比较大于。

-这 数字比较小于或等于。

-lt 数字比较小于。

上述基本表达式,其中一元运算符优先于二元运算符
运算符,可以与以下运算符结合使用(按升序排列)
优先):

expr -o expr 逻辑或。
expr -a expr 逻辑与。
! expr 逻辑非。
( expr ) 分组。

请注意,数字实际上可能是算术表达式,例如数学表达式
term 或整数变量的名称:

x=1; [ "x" -eq 1 ] 评估为真

请注意,如果
参数 test 或括号内 [ ... ] 小于 XNUMX:如果前导 '!'
参数可以被剥离,这样只剩下一到三个参数,然后
执行降低的比较; (感谢 XSI)括号 \( ... \) 下四和
三参数形式分别为二参数形式和一参数形式; 三参数
形式最终更喜欢二元运算,其次是否定和括号
降低; 两个和四个参数的形式更喜欢否定后跟括号; 这
单参数形式总是暗示 -n.

备注:一个常见的错误是使用“if [ $foo = bar ]”,如果参数“foo”失败
为 NULL 或未设置,如果它有嵌入的空格(即 IFS 八位字节),或者它是一元
像'!'这样的运算符或者 '-n'。 使用“if [ x"$foo" = x"bar" ]” 之类的测试,或者
双括号运算符“if [[ $foo = bar ]]”或,以避免模式匹配(请参阅 [[
以上):“如果[[ $foo = "$bar" ]]”

[[ ... ]] 构造不仅使用起来更安全,而且通常更快。

[-p[管道]
如果一个 管道 给出,用于执行管道的时间被报告。 如果不
给出pipeline,然后shell本身使用的用户和系统时间,以及所有
报告它自启动以来运行的命令。 报道的时间是
实时时间(从开始到结束经过的时间),用户 CPU 时间(花费的时间
在用户模式下运行),以及系统 CPU 时间(在内核模式下运行所花费的时间)。
时间按标准误差报告; 输出格式为:

0m0.00s 真实 0m0.00s 用户 0m0.00s 系统

如果 -p 给出的选项输出稍长:

真正的0.00
用户0.00
系统0.00

指定是错误的 -p 选项,除非 管道 是一个简单的命令。

标准错误的简单重定向不影响输出 命令:

$ time sleep 1 2>afile
$ { 时间睡眠 1; 2>文件

第一个命令的时间不会转到“afile”,但第二个命令的时间会。

打印 shell 和进程使用的累积用户和系统时间
已经退出的shell启动。 输出的格式是:

0米0.00秒 0米0.00秒
0米0.00秒 0米0.00秒

陷阱 n [信号 ...]
如果第一个操作数是十进制无符号整数,这将重置所有指定的信号
到默认动作,即与调用相同 陷阱 带有减号 ('-') 作为
处理器, 后跟参数 (n [信号 ...]),所有这些都被视为
信号。

陷阱 [处理器 信号 ...]
设置一个陷阱处理程序,当任何指定的 信号S是
接收。 处理器 是一个空字符串,表示信号是
被忽略,一个减号('-'),表示对
信号(见 信号(3)) 或包含要执行的 shell 命令的字符串
第一次机会(即当前命令完成时,或打印之前
下一个 PS1 提示)在收到一个信号后。 信号 是一个名字
信号(例如 PIPE 或 ALRM)或信号编号(参见 -l 命令
以上)。

有两个特殊信号: EXIT(也称为 0),当
shell即将退出,出现错误后执行ERR; 一个错误是
如果 -e or -o 错误退出 选项
被设置。 EXIT 处理程序在上次执行的环境中执行
命令。

请注意,对于非交互式 shell,不能更改信号的陷阱处理程序
在 shell 启动时被忽略。

没有参数,自 shell 以来设置的陷阱的当前状态
开始显示为一系列 陷阱 命令。 注意输出 陷阱 不能
有用地通过管道传输到另一个进程(清除陷阱这一事实的人工产物
创建子流程时)。

原始 Korn shell 的 DEBUG 陷阱以及 ERR 和 EXIT 陷阱的处理
功能尚未实现。

true 以零值退出的命令。

全球化 [[+-alpnrtUux[-L[n]][-R[n]][-Z[n]][-i[n]] | -f [-无尾礼服]][姓名 [=折扣值] ...]
排版 [[+-alpnrtUux[-LRZ[n]][-i[n]] | -f [-无尾礼服]][姓名 [=折扣值] ...]
显示或设置参数属性。 没有 姓名 参数,参数属性
显示; 如果不使用选项,则所有参数的当前属性为
打印为 排版 命令; 如果给出了一个选项(或没有选项字母的“-”),
打印具有指定属性的所有参数及其值; 如果选项
用“+”引入,不打印参数值。

If 姓名 给定参数,设置命名参数的属性(-),或
清除(+)。 可以选择性地指定参数值。 为了 姓名[*], 这
更改会影响整个数组,并且不能指定任何值。

If 排版 在函数内部使用,指定的任何参数都是本地化的。 这个
不是由其他相同的 全球化. 备注: 这意味着 姆克什 's 全球化
命令是 不能 等同于其他编程语言,因为它不允许
从另一个函数调用的函数以访问真正全局范围内的参数,
但只会阻止将访问的内容放入本地范围。

什么时候 -f 用来, 排版 对函数的属性进行操作。 与
参数,如果没有 姓名 给出参数,列出函数及其值
(即定义)除非选项是用“+”引入的,在这种情况下,只有
报告函数名称。

-a 索引数组属性。

-f 功能模式。 显示或设置函数及其属性,而不是
参数。

-i[n] 整数属性。 n 指定显示整数时使用的基数
(如果未指定,则使用第一个赋值中给出的基数)。
可以为具有此属性的参数分配包含算术的值
表达式。

-L[n] 左对齐属性。 n 指定字段宽度。 如果 n 没有指定,
参数的当前宽度(或其第一个指定值的宽度)
用来。 前导空格(和零,如果与 -Z 选项)是
剥离。 如有必要,值会被截断或填充空格以适应
字段宽度。

-l 小写属性。 值中的所有大写字符都转换为
小写。 (在最初的 Korn shell 中,这个参数的意思是“长整数”
当与 -i 选项。)

-n 创建绑定变量(名称引用):对变量的任何访问 姓名
将访问变量 折扣值 在当前范围内(这不同于
AT&T UNIX 克什93!) 反而。 也不同于 AT&T UNIX 克什93
折扣值 当时被懒惰地评估 姓名 被访问。 这可以由
函数来访问名称作为参数传递的变量,而不是
使用 评估.

-p 打印完成 排版 可用于重新创建属性的命令
和参数值。

-R[n] 右对齐属性。 n 指定字段宽度。 如果 n 是不是
指定,参数的当前宽度(或它的第一个宽度
赋值) 被使用。 尾随空格被剥离。 如有必要,
值要么去除前导字符,要么填充空格以使其成为
适合字段宽度。

-r 只读属性。 不能将具有此属性的参数分配给
或取消设置。 此属性一旦设置,就无法关闭。

-t 标签属性。 对外壳没有意义; 供应用程序使用。

对于函数, -t 是跟踪属性。 当与跟踪一起工作时
属性被执行, 跟踪 (-x) shell 选项暂时开启
上。

-U 无符号整数属性。 整数被打印为无符号值(组合
-i 选项)。 此选项不在原始 Korn shell 中。

-u 大写属性。 值中的所有小写字符都转换为
大写。 (在最初的 Korn shell 中,这个参数的意思是“无符号
整数”与 -i 这意味着大写字母的选项
永远不要用于大于 10 的基数。请参阅 -U 选项。)

对于函数, -u 是未定义的属性。 看 主要工作内容 以上为
这的影响。

-x 导出属性。 参数(或函数)放置在
任何已执行的命令。 导出的功能尚未实现。

-Z[n] 零填充属性。 如果不结合 -L,这与 -R, 除
使用零填充代替空格填充。 对于整数,数
而不是基地被填充。

如果其中任何一个 -i, -L, -l, -R, -U, -u-Z 选项已更改,所有其他选项从此开始
set 被清除,除非它们也在同一命令行中给出。

极限 [-aBCcdefHilMmnOPpqrSsTtVvw[折扣值]
显示或设置过程限制。 如果未使用任何选项,则文件大小限制 (-f)是
假定。 折扣值,如果指定,可以是算术表达式或单词
“无限”。 这些限制会影响 shell 和 shell 创建的任何进程
施加限制后。 请注意,某些系统可能不允许限制
设置后增加。 另请注意,可用的限制类型是系统
依赖——一些系统只有 -f 限制。

-a 显示所有限制; 除非 -H 使用时,显示软限制。

-B n 将套接字缓冲区大小设置为 n 千字节。

-C n 将缓存线程数设置为 n.

-c n 施加大小限制 n 阻止核心转储的大小。

-d n 施加大小限制 n 千比字节的数据区大小。

-e n 将最大niceness设置为 n.

-f n 施加大小限制 n 阻止 shell 及其子进程写入的文件
进程(可以读取任何大小的文件)。

-H 仅设置硬限制(默认设置为同时设置硬限制和软限制)。

-i n 将挂起信号的数量设置为 n.

-l n 施加限制 n 千比字节的锁定(有线)物理内存量。

-M n 将 AIO 锁定内存设置为 n 千字节。

-m n 施加限制 n 千比字节的物理内存使用量。

-n n 施加限制 n 可以立即打开的文件描述符。

-O n 将 AIO 操作的数量设置为 n.

-P n 将每个进程的线程数限制为 n.

-p n 施加限制 n 用户可以在任何时候运行的进程。

-q n 将 POSIX 消息队列的大小限制为 n 个字节。

-r n 将最大实时优先级设置为 n.

-S 仅设置软限制(默认设置为同时设置硬限制和软限制)。

-s n 施加大小限制 n 千比字节的堆栈区域大小。

-T n 施加时间限制 n 每个进程使用的实际秒数。

-t n 施加时间限制 n 每个用户在用户模式下花费的 CPU 秒数
的过程。

-V n 将 Haiku 上的 vnode 监视器数量设置为 n.

-v n 施加限制 n 虚拟内存量(地址空间)上的千字节
用过的。

-w n 施加限制 n 使用的交换空间量的千比字节。

据,直到...为止 极限 就其而言,一个块是 512 字节。

遮罩 [-S[面膜]
显示或设置文件权限创建掩码或 umask(请参阅 遮罩(2))。 如果 -S
使用选项,显示或设置的掩码是象征性的; 否则,它是一个八进制
数。

符号掩码就像那些 CHMOD(1). 使用时,它们描述了什么
可以提供权限(与八进制掩码相反,在八进制掩码中设置位意味着
相应的位将被清除)。 例如,“ug=rwx,o=”将掩码设置为
文件将不能被“其他人”读取、写入或执行,并且是等效的
(在大多数系统上)到八进制掩码“007”。

无别名 [-adt[姓名 ...]
给定名称的别名被删除。 如果 -a 使用选项,所有别名
被删除。 如果 -t or -d 使用选项,执行指示的操作
分别用于跟踪或目录别名。

未设定 [-fv] 参数 ...
取消设置命名参数 (-v, 默认值) 或函数 (-f)。 同 参数[*],
保留属性,仅未设置值。

如果任何参数具有只读属性,则退出状态为非零
设置,否则为零。

等待 [工作 ...]
等待指定的作业完成。 的退出状态 等待 是最后一个
指明工作; 如果最后一个作业被信号杀死,则退出状态为 128 +
信号编号(见 -l 退出状态 以上); 如果最后指定的工作不能
被发现(因为它从来不存在,或者已经完成),退出状态 等待
是 127。见 工作 控制 以下为格式 工作. 等待 如果有信号,将返回
收到已设置陷阱的信号,或者收到 SIGHUP、SIGINT 或 SIGQUIT 信号
收到。

如果没有指定工作, 等待 等待所有当前正在运行的作业(如果有)
完成并以零状态退出。 如果启用了作业监控,则完成
打印作业的状态(当明确指定作业时,情况并非如此)。

何处 [光伏发电[姓名 ...]
没有 -v 选项,它与 命令 -v, 除了不打印别名
作为别名命令。 随着 -v 选项,它与 命令 -V。在
无论哪种情况, -p 选项不同:搜索路径不受影响 何处,但
搜索仅限于路径。

工作 控制
作业控制是指 shell 监视和控制作为进程或
为命令或管道创建的进程组。 至少,外壳会跟踪
当前存在的后台(即异步)作业的状态; 这个
信息可以使用 工作 命令。 如果作业控制已完全启用
(使用 -m or -o 监控),就像交互式 shell 一样,作业的进程
被放置在他们自己的进程组中。 可以通过键入 suspend 停止前台作业
来自终端的字符(通常是 ^Z),作业可以在前台或
背景使用 fgbg 命令,并保存或恢复终端状态
分别在前台作业停止或重新启动时。

请注意,只有创建进程的命令(例如异步命令、子shell
命令,以及非内置、非功能命令)可以停止; 命令像 不能
是。

创建作业时,会为其分配作业编号。 对于交互式 shell,这个数字是
打印在“[..]”中,然后是作业中进程的进程ID
运行异步命令。 工作可以在 bg, fg, 工作, 等待
命令或者通过命令管道中最后一个进程的进程 ID(如存储在
$! 参数)或在作业编号前加上百分号 ('%')。 其他百分比
序列也可用于指代工作:

%+ | %% | % 最近停止的作业,或者,如果没有停止的作业,最旧的
运行作业。

%- 将成为的工作 %+ 工作,如果后者不存在。

%n 有工作号的工作 n.

%?绳子 其命令包含字符串的作业 绳子 (如果发生错误
匹配多个作业)。

%绳子 其命令以字符串开头的作业 绳子 (如果发生错误
匹配多个作业)。

当作业改变状态时(例如后台作业完成或前台作业停止),
shell 打印以下状态信息:

[] 状态 命令

在哪里...

是作业的作业编号;

如果作业是“+”或“-”字符 %+ or %- 工作,分别,或空间
如果两者都不是;

状态 指示作业的当前状态,可以是:

完毕 []
作业退出。 是省略的作业的退出状态
如果状态为零。

Running 作业既没有停止也没有退出(注意 running 不会
必然意味着消耗 CPU 时间——进程可能被阻塞
等待某个事件)。

停止 [信号]
作业已被指示停止 信号 (如果没有给出信号,则
作业被 SIGTSTP 停止)。

信号描述 [“核心转储”]
作业被信号终止(例如内存故障、挂断); 用 -l
获取信号描述列表。 “核心转储”消息表明
该进程创建了一个核心文件。

命令 是创建进程的命令。 如果有多个进程
作业,每个进程都会有一行显示其 命令 并且可能是它的 状态如果
它不同于前一个进程的状态。

当有作业处于停止状态时尝试退出 shell 时,
shell 警告用户有已停止的作业并且不会退出。 如果另一次尝试是
立即退出外壳,停止的作业会发送一个 SIGHUP 信号,外壳
退出。 同样,如果 诺哈普 选项未设置并且尝试时有正在运行的作业
退出登录shell,shell警告用户并且不退出。 如果另一个
立即尝试退出 shell,正在运行的作业被发送一个 SIGHUP 信号并且
外壳退出。

POSIX 模式
进入 -o POSIX 模式会导致 姆克什 在某些地方表现得更加符合 POSIX
默认值或意见不同的地方。 注意 姆克什 仍将使用未签名操作
32 位算术; 用 小鱼 如果主机上的算术 数据类型,完整的 ISO C
未定义的行为,是必需的; 参考 小鱼(1) 手册页的详细信息。 大多数其他
历史悠久的 AT&T UNIX KSH- 可以使用此禁用兼容或自以为是的差异
模式; 这些是:

· GNU 打坏 I / O重定向 &>文件 不再支持。

· I/O 重定向创建的文件描述符由子进程继承。

· 带有前导数字零的数字被解释为八进制。

· 回音 内置不解释反斜杠,只支持确切的选项“-n“。

· ...(列表不完整,R53 可能会更改)

SH 模式
兼容模式; 旨在与不易修复的遗留脚本一起使用; 这
变化如下:

· GNU 打坏 I / O重定向 &>文件 不再支持。

· I/O 重定向创建的文件描述符由子进程继承。

· 回音 内置不解释反斜杠,只支持确切的选项“-n“。

· ...(列表不完整,R53 可能会更改)

互动 输入 线 编辑
shell 支持三种从命令行读取命令行的模式 TTY(4) 在互动中
会话,由控制 emacs的, 通用麦克斯vi 选项(最多可以设置其中之一
一次)。 默认是 emacs的. 可以使用显式设置编辑模式 内置。
如果这些选项都没有启用,shell 只是使用正常的读取行 TTY(4)
司机。 如果 emacs的 or 通用麦克斯 选项被设置,shell 允许类似 emacs 的编辑
命令; 同样,如果 vi 选项被设置,shell 允许类似 vi 的编辑
命令。 以下各节详细介绍了这些模式。

在这些编辑模式下,如果一行比屏幕宽度长(请参阅 COLUMNS
参数),最后一列会显示一个“>”、“+”或“<”字符,表示
在当前位置之后、之前和之后或之前有更多字符,
分别。 该行根据需要水平滚动。

完成的行被推入历史记录,除非它们以 IFS 八位字节或 IFS 开头
空格,或与前一行相同。

Emacs的 编辑 模式
当。。。的时候 emacs的 设置选项,启用交互式输入行编辑。 警告:此模式
与原始 Korn shell 中的 emacs 模式略有不同。 在这种模式下,各种
编辑命令(通常绑定到一个或多个控制字符)导致立即操作
无需等待换行符。 几个编辑命令绑定到特定的控件
调用 shell 时的字符; 这些绑定可以使用 绑定 命令。

以下是可用编辑命令的列表。 每个描述都以
命令的名称,以冒号为后缀; 一个 [n](如果命令可以带有前缀
数数); 以及命令默认绑定到的任何键,使用插入符号编写,例如
ASCII ESC 字符写为 ^[。 这些控制序列不区分大小写。
使用序列 ^[ 输入命令的计数前缀n,其中 n 是 1 的序列
或更多数字。 除非另有说明,如果省略计数,则默认为 1。

请注意,编辑命令名称仅用于 绑定 命令。 此外,许多
编辑命令仅在具有可见光标的终端上有用。 默认绑定
被选择以类似于相应的 Emacs 键绑定。 用户的 TTY(4) 字符
(例如ERASE)绑定到合理的替代品并覆盖默认绑定。

中止:^C, ^G
中止当前命令,清空行缓冲区并将退出状态设置为
打断了。

自动插入:[n]
只是使字符显示为文字输入。 最普通的人物
受此约束。

向后字符:[n] ^B、^XD、ANSI-CurLeft、PC-CurLeft
向后移动光标 n 字符。

反向词:[n] ^[b、ANSI-Ctrl-CurLeft、ANSI-Alt-CurLeft
将光标向后移动到单词的开头; 单词包括
字母数字、下划线 ('_') 和美元符号 ('$') 字符。

历史的开始:^[
移动到历史的开始。

行首:^A、ANSI-Home、PC-Home
将光标移动到已编辑输入行的开头。

大写字:[n] ^[C, ^[C
大写下一个中的第一个字符 n 单词,将光标留在末尾
最后一句话。

清屏:^[^L
打印一个编译时可配置的序列以清除屏幕并将光标归位,
重绘整个提示和当前编辑的输入行。 默认序列
适用于几乎所有标准终端。

评论:^[#
如果当前行不以注释字符开头,则在
行的开头和行被输入(就像按下了返回键一样);
否则,删除现有的注释字符并将光标置于
行的开头。

完整:^[^[
自动完成尽可能多的命令名或文件名
包含光标。 如果整个剩余的命令或文件名是唯一的,则
空格在完成后打印,除非它是目录名,在这种情况下
'/' 被附加。 如果当前部分单词没有命令或文件名
作为它的前缀,输出一个铃字符(通常导致发出哔哔声)。

完整命令:^X^[
自动完成尽可能多的命令名称的唯一性
直到光标的单词作为其前缀,如 完成 上面的命令。

完整文件:^[^X
自动完成尽可能多的具有部分文件名的文件名
直到光标的单词作为其前缀,如 完成 上面描述的命令。

完整列表:^I, ^[=
尽可能多地完成当前单词,并列出可能的
完成它。 如果只有一个完成是可能的,匹配 完成
上面的命令。 请注意,^I 通常由 TAB(制表符)键生成。

向后删除字符:[n] 擦除, ^?, ^H
删除 n 光标前的字符。

删除字符转发:[n] ANSI-Del、PC-Del
删除 n 光标后的字符。

向后删除字:[n] 删除, ^[^?, ^[^H, ^[h
删除 n 光标前的单词。

删除字转发:[n] ^ [d
删除光标后到末尾的字符 n 话。

下史:[n] ^N、^XB、ANSI-CurDown、PC-CurDown
向前滚动历史缓冲区 n 行(稍后)。 每条输入线原本
在历史缓冲区中的最后一个条目之后开始,所以 下历史 是不是
有用直到 搜索历史记录, 搜索历史记录 or 历史 一直
执行。

小写字:[n] ^[L, ^[L
下一个小写 n 话。

编辑行:[n] ^薛
编辑行 n 或当前行,如果未指定,则以交互方式。 实际上
执行的命令是 fc -e ${视觉:-${编辑:-vi}} n.

历史终结:^[>
移动到历史的尽头。

行尾:^E、ANSI-End、PC-End
将光标移动到输入行的末尾。

欧特:^_
充当文件结尾; 这很有用,因为编辑模式输入禁用正常
终端输入规范化。

删除或删除:[n]^D
作为 ot 如果单独在线; 否则充当 删除字符转发.

错误:(未绑定)
错误(按铃)。

交换点和标记:^X^X
将光标放置在标记所在的位置并将标记设置在光标所在的位置。

展开文件:^[*
将“*”附加到当前单词并用结果替换该单词
对单词执行文件通配。 如果没有文件与模式匹配,则铃声为
响。

前向字符:[n] ^F、^XC、ANSI-CurRight、PC-CurRight
向前移动光标 n 字符。

前言:[n] ^[f、ANSI-Ctrl-CurRight、ANSI-Alt-CurRight
将光标向前移动到末尾 n第一句话。

转到历史:[n] ^[克
转到历史编号 n.

杀戮线:杀戮
删除整个输入行。

杀戮区域:^W
删除光标和标记之间的输入。

杀到eol:[n]^K
删除从光标到行尾的输入,如果 n 未指定;
否则删除光标和列之间的字符 n.

列表:^[?
打印一个排序的、分列的命令名或文件名(如果有)列表
完成包含光标的部分单词。 目录名称附加了“/”
给他们。

列表命令:^X?
打印一个排序的、分列的命令名称列表(如果有的话)
包含光标的部分单词。

列表文件:^X^Y
打印一个排序的、分列的文件名列表(如果有的话)
包含光标的部分单词。 文件类型指示符如所述附加
名单 以上。

换行符:^J, ^M
使当前输入行由外壳程序处理。 当前光标
位置可能在线上的任何位置。

换行符和下一个:^O
使当前输入行被 shell 处理,下一行从
历史成为当前行。 这只有在 历史,
搜索历史记录 or 搜索历史记录.

无操作:退出
这没有任何作用。

前缀 1:^[
引入 2 个字符的命令序列。

前缀 2: ^X, ^[[, ^[O
引入 2 个字符的命令序列。

上一个历史词:[n] ^[., ^[_
最后一个词,或者,如果给出, n前一个(在重复的
执行、倒数第二、倒数第三等)命令插入到光标处。 用于
此编辑命令会破坏标记。

引用: ^^, ^V
下面的字符是按字面意思理解的,而不是作为编辑命令。

重绘:^L
将提示字符串的最后一行和当前输入行重新打印到新的
线。

搜索字符向后:[n]^[^]
在当前行中向后搜索 n下一个字符的第 th 次出现
打字。

搜索字符转发:[n]^]
在当前行中向前搜索 n下一个字符的第 th 次出现
打字。

搜索历史:^R
进入增量搜索模式。 内部历史列表向后搜索
匹配输入的命令。 搜索字符串中的首字母 '^' 锚定
搜索。 退出键将退出搜索模式。 其他命令,包括序列
逃脱作为 前缀-1 其次是 前缀-1 or 前缀-2 密钥将在之后执行
离开搜索模式。 这 中止 (^G) 命令将恢复之前的输入行
搜索开始。 连续 搜索历史记录 命令继续向后搜索
模式的下一次出现。 历史缓冲区只保留一个
行数有限; 必要时丢弃最旧的。

搜索历史记录:ANSI-PgUp、PC-PgUp
在历史缓冲区中向后搜索开头匹配的命令
光标前的输入行部分。 当在空行上使用时,这有
效果一样 历史.

搜索历史记录:ANSI-PgDn、PC-PgDn
在历史缓冲区中向前搜索开头匹配的命令
光标前的输入行部分。 当在空行上使用时,这有
效果一样 下历史. 这只有在 历史,
搜索历史记录 or 搜索历史记录.

设置标记命令:^[
在光标位置设置标记。

转置字符:^T
如果在行尾,或者 通用麦克斯 选项已设置,这将交换两个
以前的字符; 否则,它会交换前一个和当前的字符并
将光标向右移动一个字符。

历史:[n] ^P、^XA、ANSI-CurUp、PC-CurUp
向后滚动历史缓冲区 n 行(较早)。

大写字:[n] ^[你,^[你
大写下一个 n 话。

版本:^[^V
显示版本 姆克什. 一键恢复当前编辑缓冲区
被按下。 恢复按键被处理,除非它是一个空格。

猛拉:^Y
在当前光标位置插入最近杀死的文本字符串。

猛拉流行音乐:^[y
紧接着 猛拉, 将插入的文本字符串替换为之前的下一个
杀死的文本字符串。

Vi 编辑 模式
请注意: vi 命令行编辑模式是孤立的,但仍然有效。 它是 8 位干净的
但特别不支持 UTF-8 或 MBCS。

vi 命令行编辑器 姆克什 与基本相同的命令 vi(1) 编辑器
以下例外情况:

· 您以插入模式开始。

· 有文件名和命令补全命令:=、\、*、^X、^E、^F 和,
可选, 和.

· _ 命令是不同的(在 姆克什,它是最后一个参数命令; 在 vi(1)它去
到当前行的开头)。

· /G 命令向相反的方向移动 j 命令。

· 在单行编辑器中没有意义的命令不可用(例如 screen
运动指令和 ex(1) 式冒号 (:) 命令)。

喜欢 vi(1)、有两种模式:“插入”模式和“命令”模式。 在插入模式下,大多数
字符在输入时被简单地放在当前光标位置的缓冲区中;
但是,某些字符被特殊处理。 特别地,以下字符是
取自当前 TTY(4) 设置(见 姿势(1)) 并具有它们通常的含义(正常值
在括号中):kill (^U)、erase (^?)、werase (^W)、eof (^D)、intr (^C) 和 quit (^\)。
除上述外,以下字符在insert中也有特殊处理
模式:

^E 命令和文件名枚举(见下文)。

^F 命令和文件名补全(见下文)。 如果连续使用两次,列表
显示可能的完成; 如果第三次使用,则完成被撤消。

^H 擦除前一个字符。

^J | ^M 行尾。 当前行由 shell 读取、解析和执行。

^V 接下来是字面意思。 输入的下一个字符不被特殊处理(可用于
插入此处描述的字符)。

^X 命令和文件名扩展(见下文)。

将编辑器置于命令模式(见下文)。

可选的文件名和命令完成(请参阅 ^F 以上),启用 -o
vi表完成.

在命令模式下,每个字符都被解释为一个命令。 不会的字符
对应于命令,是非法的命令组合,或者是不能被
执行,所有原因蜂鸣声。 在以下命令描述中,一个 [n] 表示
命令可以以数字为前缀(例如 10l 向右移动 10 个字符); 如果没有号码
使用前缀, n 除非另有说明,否则假定为 1。 术语“当前
位置”是指光标与光标前一个字符之间的位置。
“单词”是字母、数字和下划线字符的序列或非
字母、非数字、非下划线和非空白字符(例如“ab2*&^”包含两个
词),而“大词”是一系列非空白字符。

Special 姆克什 vi 命令:

以下命令不在或不同于普通 vi 文件编辑器:

[n]_ 插入一个空格,后跟 n历史上最后一个命令的大字
在当前位置并进入插入模式; 如果 n 未指定,最后
词被插入。

# 在当前行的开头插入注释字符('#')并返回
到外壳的线(相当于 我#^J).

[n]g 喜欢 G,除非 n 未指定,它会转到最近记住的
线。

[n]v 编辑行 n 使用 vi(1) 编辑; 如果 n 未指定,当前行是
编辑。 实际执行的命令是 fc -e ${视觉:-${编辑:-vi}} n.

* 和 ^X 命令或文件名扩展应用于当前大字(带有
如果单词不包含文件通配符,则附加“*”)——大词是
替换为结果词。 如果当前的大字是第一个
行或跟随字符 ';'、'|'、'&'、'(' 或 ')' 之一,并且不
包含斜杠('/'),则命令扩展完成; 否则文件名
扩展完成。 命令扩展将匹配所有的大字
别名、函数和内置命令以及找到的任何可执行文件
通过在 PATH 参数中搜索目录。 文件名扩展匹配
针对当前目录中文件的大字。 扩容后,
光标刚好位于最后一个单词之后,编辑器处于插入模式。

[n]\,[n]^F,[n] , 和 [n]
命令/文件名补全。 用最长的替换当前的大字
执行命令和文件名扩展后获得的唯一匹配。
仅当 vi表完成 选项已设置,而只是
承认如果 完成 选项已设置(见 -o)。 如果 n 被指定,
n选择了可能的完成(如命令/文件名所报告的那样)
枚举命令)。

= 和 ^E 命令/文件名枚举。 列出所有匹配的命令或文件
当前的大字。

^V 显示版本 姆克什. 当前编辑缓冲区会尽快恢复
键被按下。 恢复按键被忽略。

@c 宏扩展。 执行在别名中找到的命令 c.

行内移动命令:

[n]手 [n]^H
向左移动 n 字符。

[n]土地 [n]
向右移 n 字符。

0 移至第 0 列。

^ 移至第一个非空白字符。

[n]| 移至列 n.

$ 移至最后一个字符。

[n]b 向后移动 n 话。

[n]B 向后移动 n 大话。

[n]e 前进到词尾, n 倍。

[n]E 前进到大字的结尾, n 倍。

[n]w 前进 n 话。

[n]W 前进 n 大话。

% 查找匹配。 编辑器期待最近的括号、括号或大括号
然后将光标移动到匹配的括号、括号或大括号。

[n]fc 前进到 n字符的第 th 次出现 c.

[n]Fc 向后移动到 n字符的第 th 次出现 c.

[n]tc 前进到就在 n字符的第 th 次出现 c.

[n]Tc 向后移动到 n字符的第 th 次出现 c.

[n]; 重复最后 f, F, tT 命令。

[n], 重复上一次 f, F, tT 命令,但向相反的方向移动。

行间移动命令:

[n]j,[n]+ 和 [n]^N
转移到 n历史上的下一行。

[n]k, [n]-, 和 [n]^P
转移到 n历史上的前一行。

[n]G 移至行 n 在历史上; 如果 n 未指定,第一个的数量
使用了记住的行。

[n]g 喜欢 G,除非 n 未指定,它会转到最近记住的行。

[n]/绳子
在历史中向后搜索 n第 行 包含 绳子; 如果 绳子
以 '^' 开头,字符串的其余部分必须出现在历史记录的开头
行使其匹配。

[n]?绳子
与...一样 /,除了它在历史中向前搜索。

[n]n 搜索 n最后一个搜索字符串的第 th 次出现; 搜索的方向
与上次搜索相同。

[n]N 搜索 n最后一个搜索字符串的第 th 次出现; 搜索的方向
与上次搜索相反。

ANSI 卷曲, PC-PgUp
取行首到当前光标位置的字符为
搜索字符串并对以此开头的行进行向后历史搜索
细绳; 保持光标位置。 这仅适用于插入模式并保持它
启用。

编辑命令

[n]a 附加文本 n 次; 在当前位置之后进入插入模式。 这
append 仅在重新进入命令模式时才被复制,即用来。

[n]A 一样 a, 除了它附加在行尾。

[n]i 插入文本 n 次; 在当前位置进入插入模式。 插入
仅在重新进入命令模式时才复制,即用来。

[n]我和 i, 除了插入是在第一个非空白字符之前完成的。

[n]s 替换下一个 n 字符(即删除字符并进入插入
模式)。

S 替换整行。 从第一个非空白字符到结尾的所有字符
行被删除并进入插入模式。

[n]c移动命令
从当前位置更改为由以下结果产生的位置 n 移动命令s(即
删除指定区域并进入插入模式); 如果 移动命令 is c时,线
从第一个非空白字符开始更改。

C 从当前位置改变到行尾(即删除到行尾
行并进入插入模式)。

[n]x 删除下一个 n 字符。

[n]X 删除上一个 n 字符。

D 删除到行尾。

[n]d移动命令
从当前位置删除到产生的位置 n 移动命令s;
移动命令 是一个移动命令(见上文)或 d,在这种情况下,当前行是
删除。

[n]rc 更换下一个 n 字符与字符 c.

[n]R 替换。 进入插入模式但覆盖现有字符而不是插入
在现有字符之前。 重复更换 n 倍。

[n]~ 改变大小写下 n 字符。

[n]y移动命令
从当前位置拉到产生的位置 n 移动命令s 进入
猛拉缓冲区; 如果 移动命令 is y, 整条线被猛拉。

Y 从当前位置拉到行尾。

[n]p 在当前位置之后粘贴 yank 缓冲区的内容, n 倍。

[n]P 同 p,除了缓冲区粘贴在当前位置。

其他 vi 命令

^J 和 ^M
当前行由 shell 读取、解析和执行。

^L 和 ^R
重绘当前行。

[n]。 重做上次编辑命令 n 倍。

u 撤销上次编辑命令。

U 撤销对当前行所做的所有更改。

PC Home、End、Del 和光标键
它们在插入和命令模式下都按预期移动。

INTR退出
中断和退出终端字符导致当前行被删除和
要打印的新提示。

使用 onworks.net 服务在线使用 mksh


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    Alt-F
    Alt-F
    Alt-F 提供了一个免费和开源的
    DLINK 的替代固件
    DNS-320/320L/321/323/325/327L and
    DNR-322L。 Alt-F 有 Samba 和 NFS;
    支持ext2/3/4...
    下载 Alt-F
  • 2
    usm
    usm
    usm 是一个统一的 slackware 包
    处理自动的经理
    依赖解决。 它统一了
    各种软件包存储库,包括
    slackware、slacky、p...
    下载usm
  • 3
    chart.js之
    chart.js之
    Chart.js 是一个 Javascript 库,它
    允许设计师和开发人员绘制
    使用HTML5的各种图表
    画布元素。 Chart js 提供了一个很好的
    大批 ...
    下载 Chart.js
  • 4
    用于JasperReports的iReport-Designer
    用于JasperReports的iReport-Designer
    注意:iReport/Jaspersoft Studio 支持
    公告:从 5.5.0 版开始,
    Jaspersoft Studio 将成为官方
    JasperReports 的设计客户端。 iReport
    将...
    下载 JasperReports 的 iReport-Designer
  • 5
    安装后F
    安装后F
    PostInstallerF 将安装所有
    Fedora Linux 和其他软件
    默认不包括,之后
    第一次运行 Fedora。 它的
    容易...
    下载 PostInstallerF
  • 6
    痕迹
    痕迹
    strace 项目已移至
    https://strace.io. strace is a
    诊断、调试和指导
    Linux 的用户空间跟踪器。 它被使用
    监控一个...
    下载跟踪
  • 更多 ”

Linux 命令

Ad