1、基本的通配符有哪些?
·“?”可替代单个字符。
·“*”可替代任意字符。
·方括号“[charset]”可替代charset集中的任何单个字符。
对最后一条做些解释。[cChH]通配符便可替代c或h字符的大小写形式。
通配符集还能描述介于字符对之间的所有字符。如“[a-z]”就可以代
替任意小写字母,而[a-zA-Z]则可替代任意字母。注意可替代的字符
包括字符包括字符对之间的所有字符。
与DOS相比,UNIX的通配符机制要比DOS好得多。在DOS中,任何在“*”
之后,在“.”之彰的字符均被忽略,所以下面的指令将不能得到你想
象的结果。
del *bak.*
在DOS中,用户只能用此命令删除当前目前下的所有文件,除非系统要
求你不这样做。而在UNIX系统中,“*”可替代包括0在内的任意数字的
字符,但一行中的其余特征也仍需匹配,因此“bak.*”可匹配
newbak.save、oldbak.new甚至bak.temp,但不能和newbak匹配,因为后
者不含“.”。这非常巧妙,可大大方便用户,而“*bak”则可匹配以上
所有的词条,包括newbak。
2、能在一条指令中用多个通配符吗?
可以,如
rm a*out*tmp?
该命令可以删除一系列临时性的输出文件,如ab.out.temp1、ab.out.temp1
等。
3、如何利用通配符使指令更灵活?
UNIX可将有一定关的文件看作一集合的一部分,用户可以用该集合去匹配。
所以,如果你需要删除file1.temp、file2.temp……file9.temp,只须健入:
rm file[0-9].temp
该技巧的用处在于可以用删除那些相要删除的文件。如果你每天都要为一个
非常重要的数据库做一个“dump”报告,你把文件存入dump.'date%h%d',
它包括一系列文件如下:
dump.jun23
dump jun24
dump jun25
dump.jun26
再让我们假设因为每个文件的容量都在100M左右,所以磁盘空间很快会被占满,
因此需要每隔几天删去一些老的文件,只留下最近的两个文件,为此,键入:
rm –i du*[34]
这条指令将删去那些以“du”开头并以“3”或“4”结尾的文件。
通配符的使用
在使用文件时,主文件名和扩展名中还可以使用通配符“*”“?”。其中“*”代表从它所在位置直到“.”(主文件名中为到“.”前,扩展名为“.”后)的所有字符;“?”代表它所在位置的任意字符。
实例:
A.?? 表示文件主名为A,扩展名不超过两个字符的文件
???.com 表示文件名不超过三个字符,扩展名为COM的文件
*.* 表示所有文件
ABC.* 表示文件名为ABC,具有任意扩展名的文件
*.EXE 表示以EXE为扩展名的所有文件
A*.* 表示以字符A开头的所有文件 例如: ABC.txt ABD.com等
A??.* 表示文件主名以A开头且不超过三个字符,具有任意扩展名
的文件
tabs)
%x
匹配任何数量的非空格
[range]
匹配任何数量的在[range]中列出的字符
^
强制从一行的开始进行匹配
$
强制匹配到一行的结束
(pattern)
保存匹配的式样到参数%1~%9
~
包括其中的字符不会被解释为特殊字符
{val1|val2|val3|...}
匹配其中列出的任何特殊的串
{^string}
不匹配其中包括的串
使用[range]时,你可以在其中列出需要的字符例如 [abc] 或使用范围 [a-c] 。
为了匹配特殊字符本身,可以使用~将特殊字符括住,例如:~[test~] 将匹配字符串
[test] 而不是作为 [range] 来匹配。
只使用$可以匹配一个空行。
别名中使用参数的例子
我们在解谜过程中向npc提出的问题通常是以:
ask npc about here
ask npc about rumors
ask npc about name
这样三个命令开始的,把他们定义成别名可以节省一些时间,像这样:
#al askn {ask %1 about here;ask %1 about here;ask %1 about name}
可如果npc的名字有两个单词,或一堆同名的npc中你要问其中第二个,就需要把别名
中的参数改为%-1,此时执行askn bing 2或askn tian bing就不会出错了。
为了更好的理解参数的作用,试试执行下面的命令:
#al tt test1 %1 test2 %2 test3 %-1 test4 %-2
看看执行{tt a1 a2 a3 a4 a5}的结果,一切都清楚了吧?
表达式
当执行运算时,如果所有参数均为数字,则执行数学运算,否则执行字符串操作。以
下是一些常用的表达式(v1和v2代表变量或另外的表达式):
v1 v2
如果v1或v2不是数字,则执行字符串相加
v1-v2
从v1中减去v2
v1*v2
相乘
v1/v2
v1除v2,结果不含小数
v1\v2
取模
v1&v2
逻辑运算and
v1 and v2
同上
v1 | v2
逻辑运算or
v1 or v2
同上
v1 xor v2
逻辑运算xor
v1 = v2
如果v1等于v2返回真
v1 > v2
如果v1大于v2返回真
v1 < v2
如果v1小于v2返回真
v1 >= v2
如果v1大于等于v2返回真
v1 <= v2
如果v1小于等于v2返回真
v1 <> v2
如果v1不等于v2返回真
v1 != v2
同上
v1 =~ v2
如果表达式v1中的pattern包含v2,返回真
v1 ~= v2
同上
-v1
返回v1的负值
!v1
逻辑运算非
命令:
number]
Syntax:牋?#number command
这个命令向MUD重复发送number次命令,number必须是一个常数,如果要使用变量,请
使用loop命令。当前已经重复的计数保存在系统变量%repeatnum中。
实例:
#4 fight bing %i
命令将被解释成{fight bing 1;fight bing 2;...;fight bing 4}发往MUD10
abort
Syntax:牋?#AB
停止分析处理当前的命令行中#ab以后的部分
实例:
get all corpse;#ABORT;split
在这个例子中,split将被忽略
action
Syntax:牋?#AC pattern command [classname]
Related:牋?#TRIGGER #T #T- #IGNORE
这是zMUD中最有用的特性之一。当从MUD中收到一条匹配的文本时,预先定义的命令将
被执行。这条命令的第一个参数是被匹配的文本,如果文本中包含空格,你需要将它
用括号{}括起来。pattern中能够包含特殊的pattern matching symbols 和通配符。
第二个参数是将要被执行的命令,超过一个单词的命令也需要使用括号{}。第三个参
数用于给不同的触发动作命名分类,便于管理。高级的触发设置必须使用参数
(Preferences)对话框,在对话框中,你可以决定触发的动作是紧跟在匹配的文本之
后还是在新的一行中执行。
一个简单的例子:
#AC {你买下一件藤甲} {wear jia}
这样,无论何时只要你买了藤甲,立刻可以自动穿上。
自动登录的例子:
#AC {^您的英文名字:} {river}
#AC {^请输入相应密码:} {12345}
然后在参数对话框中关闭 Trigger on Newline 设置并且打开 Trigger on Prompt 这
样名字和密码将紧接着提示行输入而不会等待换行。注意,字符 ^ 将强制从一行的头
部开始匹配。
触发中的参数
#AC {^You get (%d) coins} {chat I get oin } rich
当你看到一行“You get [number] coins”时,其中的数值将被存放在变量%1中,其
后执行的命令可以使用这个数值。在这个例子中用到了类(class)名rich,这样你就
能够使用t 和t-命令来打开或关闭这个触发。
add
Syntax:牋?#AD variable amount
这个例子允许你做一个简单的算术计算。amount可以是数值或变量。如果要做减法,
可以使用负值。复杂一些的算术计算,请使用 #math 命令。
实例:
#AD moves 1
给变量@moves加一
#ACTION {You get (%d) coins} {#AD gold %1}
当捡到钱时,把捡钱的数量加到 @gold 变量中
alarm
Syntax:牋?#ALA timepattern command
Related:牋?#TRIGGER
建立一个基于时间的触发,而不是根据从MUD中获得的信息触发。timepattern可以是
特定的时间或包括通配符。如果在minus前加上(-),则表示连线时间而不是实际时
间。
timepattern 的格式表示成 hours:minutes:seconds ,其中的小时和分钟是可选项,
如果不指明,则假定小时和分钟被通配符*取代。通配符*可以代替任何数值,而*10可
以匹配10、20、30等等。你也可以指定几个数值用(|)来分隔。Finally, you can
put parenthesis around the wildcards to save the values matched to the
%1..%9 parameters。(这句话我不懂,谁来帮我?)
实例:
#ALARM -30:00 {save}
这里的 hour 没有指定,所以默认为*。 因此,这个例子将在连线后每隔30分钟执行
save 命令。
#ALARM 3:00:00 {gossip Why arent you sleeping?}
命令将在凌晨3点触发。
#ALARM -59:(55|56|57|58|59) {#SHOW 60-%1}
这个命令在你连线时每个小时的最后5秒在屏幕上显示 5 4 3 2 1。
alias
Syntax:牋?#AL [aliasname] [string]
Related:牋?#VARIABLE
保存一个或一组命令到一个较短的别名中。当执行别名时,命令中的变量能够被扩
展。如果需要延迟变量扩展,可以使用两个变量标志(%%)。
如果不带参数执行命令alias,所有的别名将被列出在输出窗口。如果在命令alias中
指定别名,被指定的别名将被显示。
别名能够用<tab>键扩展。在命令行中键入一个别名并按下<tab>键,命令行中的别名
将被替换成别名中包含的命令。
如果在定义别名时使用参数(%1,%2,...),在命令行中紧随别名的文本将取代这些
参数。特殊的参数%-1到%-99表示-n之后的所有文本。(使用参数的例子)
实例
#AL fs {fill waterskin}
当执行fs时,fill waterskin将被送往MUD。
#AL fs {fill @container}
在别名中使用变量,变量可以在购买容器时用触发赋值。
#AL make {#ALIAS %1 {cast %1 %%1]
在这个例子中,执行make heal将发出#ALIAS heal {cast heal %1}命令,这样就建立
了一个新的别名heal。
all
Syntax:牋?#ALL command
发送一个命令到所有角色的窗口
实例:
#ALL quit
发送 quit 命令到所有激活的角色窗口。
backup
Syntax:牋?#BA
Related:牋?#PATH #RETRACE
从当前正在记录的路径中删除最后一步
实例:
如果当前路径是 .nsew 那麽执行 #BA 将使其成为 .nse 。如果当前路径是 .n4s 则
执行 #BA 后将成为 .n3s 。?
beep
Syntax:牋?#BEEP [value]
Related:牋?#PLAY
在pc机喇叭中发声,value 对应相应的 windows 事件。
实例:
#BEEP 16
播放windows 事件 16 的声音。
#BEEP;#WAIT 500;#BEEP
beep两次,中间间隔0.5秒。
button
Syntax:牋?#BU number
触发一个自定义按钮,编号(从1至16)决定触发的按钮。number 可以是一个变量。
实例:
#BU 1
触发第一个按钮,效果相当于在屏幕上按下这个按钮
c
Syntax:牋?#C [name]
Related:牋?#C-
开始获取文本到窗口name中,如果省略name,文本将送入command editor,(如果
editor中的capturing设置可用)。如果在preferences对话框中选中Capture
Commands设置,键入的命令也将被送往这个窗口。
例子:
#c temp
开始拷贝所有从MUD中获得的文本到名为temp的窗口中
c-
Syntax:牋?#C-
Related:牋?#C
停止获取文本到另一个窗口
capture
Syntax:牋?#CAP [number] [name]
Related:牋?Editor window
获取最后number行送到另一个窗口。如果省略number,则只获取最后一行。如果
number是-1,所有的行将被拷贝。如果name省略,发送的目标将是command editor
window。
例子
#tr {咖啡告诉你:救命!} {#cap tell}
将tell的内容存入名为tell的窗口,避免忽略。
case
Syntax:牋?#CA index command1 [commandn]
允许从命令列表中选择一个命令执行。index参数决定执行哪一个命令。如果index大
于列表中的命令数,将从第一个开始重新选择。例如,列表中有4个命令,而index=
6,则第二个命令将被执行。你也可以用变量%random随机的选择需执行的命令。
实例:
#CASE 2 {first command} {second command} {third command}
执行第二个命令
#CASE @joincmd {join} {rescue}
如果变量@join是奇数,执行join,偶数执行rescue。
#CASE %random {Hello} {Hi there} {Hiya} {Hi}
随机选择问候语。
character
Syntax:牋?#CH
Related:牋?#HOST #PW
从Charater atabase中返回当前角色的名字
colse
Syntax:牋?#CL filenum
Related:牋?#FILE
根据给定的文件号关闭文件,文件必须是已经用#file命令打开的。
实例:
#CLOSE 1
关闭一号文件
clr
清除屏幕。如果要清空scrollback buffer并收回内存,请使用菜单命令Empty。
color
Syntax:牋?#CO attribute [pattern]
Related:牋?#HIGHLIGHT
如果省略pattern参数,这个命令将改变最后一行的颜色。颜色属性见下表。如果包括
pattern参数,将建立一个颜色触发,引起触发的条件除了字符对应外还需要有相同的
颜色。
Color values:
black牋?
0
blue牋
1
green
2
cyan
3
red
4
magenta
5
brown
6
gray
7
tellow
14
white
15
bold
128
要显示亮色,在基本值上加8,作为背景颜色,需要用基本值乘16。例如:使用红色背
景的值是4*16或64。在前景上使用粗体字,需要再加128。这样,在蓝色背景上的粗体
白字的值是:128 1*16 15=159。
实例:
#CO red
将最后一行的颜色变成红色
#CO bold,red
将最后一行变成红色粗体
connect
Syntax:牋?#CON
Related:牋?#DISCONNECT
断开并重新连接到当前的MUD,与菜单命令File/Reconnect 相同
cr
Syntax:牋?#CR
送一个空行到MUD
cw
Syntax:牋?#CW color
Related:牋?#COLOR
在一次成功的触发之后,改变引起触发的内容的颜色
实例:
#TRIGGER {告诉你} {#CW red}
当有人tell 你时,显示较为醒目的颜色
dde
Syntax:牋?#DDE server topic macro
这个命令允许你通过动态数据交换使用外部程序。zMUD也有一些内建的函数用于DDE: