Unix & Linux 教程学习_7
13.14命令替换
shell提供的一个最神奇、强大的特点:命令替换(command substitution)。 命令替换允许在一条命令中嵌入另一条命令。shell首先执行嵌入的命令。并且输出替换该命令。然后shell再执行整个命令。
基本语法: 通过将一条命令封装在`(反引号)字符中,可以将它嵌入到另一条命令中,例:
echo "The time and date are `date`. "
这个例子中,date命令就封装在反引号中。shell首先求date命令的值,并将date命令的输出替换到较大的命令中,然后,执行较大的命令(这个例子中就是echo).
假如现在时间是"2019年8月29日 星期四 13时53分51秒 CST"。则之前的命令就会被其值替换修改成:
echo "The time and date are 2019年8月29日 星期四 13时53分51秒 CST "
然后shell执行echo命令,生成最终输出:
The time and date are 2019年8月29日 星期四 13时53分51秒 CST
13.15 键入命令并进行修改
当需要进行一个微小修改而不得不键入整个命令是不方便的,为了方便,shell提供了几个特性,从而使命令的输入大为简化。这些特性包括:历史列表、命令行编辑、自动补全和别名.
13.16 历史列表:fc、history
fc(fix command)命令: Bourne shell家族,可以用fc命令加__-l__(list, 列举)选项显示历史列表,C-Shell家族用history命令:
fc -l
history
通过事件编号也可以调取并执行特写的命令。对于Bourne shell,可以__-s__(substitute)选项,后面跟事件编号,例如,假设希望重新执行编号24的命令,可以使用:
fc -s 24
!24
对于C-Shell,只需键入一个!(bang)字符,后面跟事件编号即可。注意, !之后不能有空格:
重新执行上一条命令:
fc -s
!!
\(~~\)//C-Shell用两个!!
两种shell都允许在重新执行命令前做些小修改:
fc -s pattern=replacement number
!number:s/pattern/replacement/
patternreplacement都是字符串,number是事件编号.
例如,事件编号25的命令是一条启动vi编辑器并打开一个叫tempfile的文件的命令:
25 vi tempfile
假设希望再次执行这条命令,但这次希望打开一个叫data的文件,可以这样:
fc -s tempfile=data 25
!25:s/tempfile/data/
如果不指定事件编号,则默认为上一条命令.
例如,希望执行date命令,但不小心输成了datq, 将显示一个错误消息:
$ datq
datq: command not found.
因此您希望将q修改成e, 然后再重新执行这条命令。则可以:
fc -s q=e
对于C-Shell可以这样:
^pattern^replacement
例:
^q^e
假设您希望复制masterdate文件,并将副本命名为backup. 这时可以用cp命令,但是您键入了:
cp masterxate backup
您得到了一个错误消息,因为不小心键入了x,而不是d.
为了修复这个错误并重新运行该命令,只需要输入下述命令即可:
^x^d