special-chars.html

来自「BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版」· HTML 代码 · 共 4,290 行 · 第 1/5 页

HTML
4,290
字号
	      <TTCLASS="FILENAME">$PATHNAME/-FILENAME</TT>. </P><P>如果变量以<TTCLASS="REPLACEABLE"><I>-</I></TT>开头进行命名, 可能也会引起问题. 		<TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;var="-n"  2&nbsp;echo $var		  3&nbsp;# 具有"echo -n"的效果了,这样什么都不会输出的. </PRE></FONT></TD></TR></TABLE>              </P></TD></TR></TABLE></DIV></DD><DT><SPANCLASS="TOKEN">-</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>先前的工作目录. </B><BCLASS="COMMAND">cd -</B>将会回到先前的工作目录. 				 它使用了<AHREF="internalvariables.html#OLDPWD">$OLDPWD</A> <AHREF="othertypesv.html#ENVREF">环境变量</A>.</P></DIV><DIVCLASS="CAUTION"><P></P><TABLECLASS="CAUTION"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/caution.gif"HSPACE="5"ALT="Caution"></TD><TDALIGN="LEFT"VALIGN="TOP"><P>不要混淆这里所使用的<SPANCLASS="QUOTE">"-"</SPAN>和先前我们所讨论的<SPANCLASS="QUOTE">"-"</SPAN>重定向操作符. 		对于<SPANCLASS="QUOTE">"-"</SPAN>的具体解释只能依赖于具体的上下文. 		</P></TD></TR></TABLE></DIV></DD><DT><SPANCLASS="TOKEN">-</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>减号. </B>减号属于<AHREF="ops.html#AROPS1">算术操作</A>. </P></DIV></DD><DT><SPANCLASS="TOKEN">=</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>等号. </B><AHREF="varassignment.html#EQREF">赋值操作</A>	        <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;a=28  2&nbsp;echo $a   # 28</PRE></FONT></TD></TR></TABLE></P></DIV><P>在<AHREF="comparison-ops.html#EQUALSIGNREF">另一种上下文环境中</A>,	      <SPANCLASS="QUOTE">"<SPANCLASS="TOKEN">=</SPAN>"</SPAN>也用来做<AHREF="comparison-ops.html#SCOMPARISON1">字符串比较</A>操作. </P></DD><DT><SPANCLASS="TOKEN">+</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>加号. </B>加法<AHREF="ops.html#AROPS1">算术操作</A>. </P></DIV><P>在<AHREF="x13673.html#PLUSREF">另一种上下文环境中</A>, 	      <SPANCLASS="TOKEN">+</SPAN>也是一种<AHREF="regexp.html">正则表达式</A>操作. </P></DD><DT><SPANCLASS="TOKEN">+</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>选项. </B>一个命令或者过滤器的选项标记. </P></DIV><P>某些命令<AHREF="internal.html#BUILTINREF">内建命令</A>使用<SPANCLASS="TOKEN">+</SPAN>来打开特定的选项,  	      用<SPANCLASS="TOKEN">-</SPAN>来禁用这些特定的选项. </P></DD><DT><SPANCLASS="TOKEN">%</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B><AHREF="ops.html#MODULOREF">取模</A>. </B>取模(一次除法的余数)<AHREF="ops.html#AROPS1">算术操作</A>. </P></DIV><P>在<AHREF="parameter-substitution.html#PCTPATREF">不同的上下文中</A>, 	      <SPANCLASS="TOKEN">%</SPAN>也是一种<AHREF="parameter-substitution.html#PSUB2">模式匹配</A>操作. </P></DD><DT><SPANCLASS="TOKEN">~</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>home目录[波浪号, 即~]. </B>相当于<AHREF="internalvariables.html#HOMEDIRREF">$HOME</A>内部变量.	      <EM>~bozo</EM>是bozo的home目录,		并且<BCLASS="COMMAND">ls ~bozo</B>将列出其中的内容.		<SPANCLASS="TOKEN">~/</SPAN>就是当前用户的home目录,		并且<BCLASS="COMMAND">ls ~/</B>将列出其中的内容. 	      <TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">echo ~bozo</KBD><SAMPCLASS="COMPUTEROUTPUT">/home/bozo</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">echo ~</KBD><SAMPCLASS="COMPUTEROUTPUT">/home/bozo</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">echo ~/</KBD><SAMPCLASS="COMPUTEROUTPUT">/home/bozo/</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">echo ~:</KBD><SAMPCLASS="COMPUTEROUTPUT">/home/bozo:</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">echo ~nonexistent-user</KBD><SAMPCLASS="COMPUTEROUTPUT">~nonexistent-user</SAMP>	      </PRE></FONT></TD></TR></TABLE>	      </P></DIV></DD><DT><SPANCLASS="TOKEN">~+</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>当前工作目录. </B>相当于<AHREF="internalvariables.html#PWDREF">$PWD</A>内部变量. </P></DIV></DD><DT><SPANCLASS="TOKEN">~-</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>先前的工作目录. </B>相当于<AHREF="internalvariables.html#OLDPWD">$OLDPWD</A>内部变量. </P></DIV></DD><DT><SPANCLASS="TOKEN">=~</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B><AHREF="bashver3.html#REGEXMATCHREF">正则表达式匹配</A>. </B>这个操作将会在<AHREF="bashver3.html#BASH3REF">version 3</A>版本的Bash部分进行讲解. </P></DIV></DD><DT><SPANCLASS="TOKEN">^</SPAN></DT><DD><DIVCLASS="FORMALPARA"><P><B>行首. </B>在<AHREF="regexp.html#REGEXREF">正则表达式</A>中, 	        <SPANCLASS="QUOTE">"^"</SPAN>表示定位到文本行的行首. </P></DIV></DD><DT>控制字符</DT><DD><P><ANAME="CONTROLCHARREF"></A></P><DIVCLASS="FORMALPARA"><P><B>修改终端或文本显示的行为. . </B>控制字符以<BCLASS="KEYCAP">CONTROL</B>	      + <BCLASS="KEYCAP">key</B>这种方式进行组合(同时按下). 	      	      控制字符也可以使用<ICLASS="FIRSTTERM">8进制</I>或<ICLASS="FIRSTTERM">16进制</I>表示法来进行表示, 	      但是前边必须要加上<ICLASS="FIRSTTERM">转义符</I>. </P></DIV><P>控制字符在脚本中不能正常使用. </P><P></P><UL><LI><P><KBDCLASS="USERINPUT">Ctl-B</KBD></P><P>退格(非破坏性的), 就是退格但是不删掉前面的字符.</P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-C</KBD></P><P>break. 终结一个前台作业.</P></LI><LI><P><ANAME="CTLDREF"></A></P><P><KBDCLASS="USERINPUT">Ctl-D</KBD></P><P>从一个shell中登出(与<AHREF="exit-status.html#EXITCOMMANDREF">exit</A>很相像). </P><P><SPANCLASS="QUOTE">"EOF"</SPAN>(文件结束). 			这也能从<TTCLASS="FILENAME">stdin</TT>中终止输入. </P><P>在console或者在<ICLASS="FIRSTTERM">xterm</I>窗口中输入的时候, 					<KBDCLASS="USERINPUT">Ctl-D</KBD>将删除光标下字符. 					当没有字符时, <KBDCLASS="USERINPUT">Ctl-D</KBD>将退出当前会话, 		  在一个xterm窗口中, 则会产生关闭此窗口的效果. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-G</KBD></P><P><SPANCLASS="QUOTE">"哔"</SPAN> (beep). 在一些老式的打字机终端上, 它会响一下铃. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-H</KBD></P><P><SPANCLASS="QUOTE">"退格"</SPAN>(破坏性的), 就是在退格之后, 还要删掉前边的字符. </P><P>		<TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;#!/bin/bash  2&nbsp;# Embedding Ctl-H in a string.  3&nbsp;  4&nbsp;a="^H^H"                  # 两个 Ctl-H's (backspaces).  5&nbsp;echo "abcdef"             # abcdef  6&nbsp;echo -n "abcdef$a "       # abcd f  7&nbsp;#  Space at end  ^              ^ 两次退格.  8&nbsp;echo -n "abcdef$a"        # abcdef  9&nbsp;#  结尾没有空格                   没有 backspace 的效果了(why?). 10&nbsp;                          # 结果并不像期望的那样. 11&nbsp;echo; echo</PRE></FONT></TD></TR></TABLE>                </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-I</KBD></P><P>水平制表符.</P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-J</KBD></P><P>重起一行(换一行并到行首). 在脚本中, 也可以使用8进制表示法 				-- '\012' 或者16进制表示法 -- '\x0a' 来表示. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-K</KBD></P><P>垂直制表符.</P><P>当在console或者<EM>xterm</EM>窗口中输入文本时, 					<KBDCLASS="USERINPUT">Ctl-K</KBD>将会删除从光标所在处到行为的全部字符. 					在脚本中, <KBDCLASS="USERINPUT">Ctl-K</KBD>的行为有些不同, 		  具体请参见下边的Lee Maschmeyer的例子程序. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-L</KBD></P><P>清屏(清除终端的屏幕显示). 在终端中,			与<AHREF="terminalccmds.html#CLEARREF">clear</A>命令的效果相同. 			当发送到打印机上时, <KBDCLASS="USERINPUT">Ctl-L</KBD>会让打印机将打印纸卷到最后. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-M</KBD></P><P>回车.</P><P>		<TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;#!/bin/bash  2&nbsp;# Thank you, Lee Maschmeyer, for this example.  3&nbsp;  4&nbsp;read -n 1 -s -p $'Control-M leaves cursor at beginning of this line. Press Enter. \x0d'  5&nbsp;                                  # 当然, '0d'就是二进制的回车.   6&nbsp;echo &#62;&#38;2   #  '-s'参数使得任何输入都不将回显出来.  7&nbsp;           #+ 所以, 明确的重起一行是必要的.  8&nbsp;  9&nbsp;read -n 1 -s -p $'Control-J leaves cursor on next line. \x0a' 10&nbsp;           #  '0a' 等价于Control-J, 换行. 11&nbsp;echo &#62;&#38;2 12&nbsp; 13&nbsp;### 14&nbsp; 15&nbsp;read -n 1 -s -p $'And Control-K\x0bgoes straight down.' 16&nbsp;echo &#62;&#38;2   #  Control-K 是垂直制表符. 17&nbsp; 18&nbsp;# 关于垂直制表符效果的一个更好的例子见下边: 19&nbsp; 20&nbsp;var=$'\x0aThis is the bottom line\x0bThis is the top line\x0a' 21&nbsp;echo "$var" 22&nbsp;#  这句与上边的例子使用的是同样的办法, 然而: 23&nbsp;echo "$var" | col 24&nbsp;#  这将造成垂直制表符右边的部分比左边部分高.  25&nbsp;#  这也解释了为什么我们要在行首和行尾加上一个换行符 -- 26&nbsp;#+ 这样可以避免屏幕显示混乱.  27&nbsp; 28&nbsp;# Lee Maschmeyer的解释: 29&nbsp;# -------------------------- 30&nbsp;#  在这里[第一个垂直制表符的例子中] . . .  31&nbsp;#+ 这个垂直制表符使得还没回车就直接打印下来.  32&nbsp;#  这只能在那些不能"后退"的设备中才行,  33&nbsp;#+ 比如说Linux的console.  34&nbsp;#  垂直制表符的真正意义是向上移, 而不是向下.  35&nbsp;#  它可以用来让打印机打印上标.  36&nbsp;#  col工具可以模拟垂直制表符的正确行为.  37&nbsp; 38&nbsp;exit 0</PRE></FONT></TD></TR></TABLE>		</P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-Q</KBD></P><P>恢复(XON).</P><P>在一个终端中恢复<TTCLASS="FILENAME">stdin</TT>. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-S</KBD></P><P>挂起(XOFF).</P><P>在一个终端中冻结<TTCLASS="FILENAME">stdin</TT>. 		  (使用Ctl-Q可以恢复输入.)</P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-U</KBD></P><P>删除光标到行首的所有字符. 			在某些设置下, 			<EM>不管光标的所在位置</EM><KBDCLASS="USERINPUT">Ctl-U</KBD>都将删除整行输入. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-V</KBD></P><P>当输入字符时, <KBDCLASS="USERINPUT">Ctl-V</KBD>允许插入控制字符. 				比如, 下边的两个例子是等价的: 		    <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;echo -e '\x0a'  2&nbsp;echo &#60;Ctl-V&#62;&#60;Ctl-J&#62;</PRE></FONT></TD></TR></TABLE></P><P><KBDCLASS="USERINPUT">Ctl-V</KBD>主要用于文本编辑. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-W</KBD></P><P>当在控制台或一个xterm窗口敲入文本时,		  <KBDCLASS="USERINPUT">Ctl-W</KBD>将会删除当前光标到左边最近一个空格间的全部字符. 		  在某些设置下, 		  <KBDCLASS="USERINPUT">Ctl-W</KBD>将会删除当前光标到左边第一个非字母或数字之间的全部字符. </P></LI><LI><P><KBDCLASS="USERINPUT">Ctl-Z</KBD></P><P>暂停前台作业.</P></LI></UL></DD><DT>空白</DT><DD><P><ANAME="WHITESPACEREF"></A></P><DIVCLASS="FORMALPARA"><P><B>用来分隔函数, 命令或变量. . </B>空白包含<ICLASS="FIRSTTERM">空格</I>,			  <ICLASS="FIRSTTERM">tab</I>, 			  <ICLASS="FIRSTTERM">空行</I>, 或者是它们之间任意的组合体.		  <ANAME="AEN1759"HREF="#FTN.AEN1759"><SPANCLASS="footnote">[4]</SPAN></A>	在某些上下文中, 	比如<AHREF="gotchas.html#WSBAD">变量赋值</A>, 	空白是不被允许的, 会产生语法错误. </P></DIV><P>空行不会影响脚本的行

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?