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 var="-n" 2 echo $var 3 # 具有"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 a=28 2 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 #!/bin/bash 2 # Embedding Ctl-H in a string. 3 4 a="^H^H" # 两个 Ctl-H's (backspaces). 5 echo "abcdef" # abcdef 6 echo -n "abcdef$a " # abcd f 7 # Space at end ^ ^ 两次退格. 8 echo -n "abcdef$a" # abcdef 9 # 结尾没有空格 没有 backspace 的效果了(why?). 10 # 结果并不像期望的那样. 11 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 #!/bin/bash 2 # Thank you, Lee Maschmeyer, for this example. 3 4 read -n 1 -s -p $'Control-M leaves cursor at beginning of this line. Press Enter. \x0d' 5 # 当然, '0d'就是二进制的回车. 6 echo >&2 # '-s'参数使得任何输入都不将回显出来. 7 #+ 所以, 明确的重起一行是必要的. 8 9 read -n 1 -s -p $'Control-J leaves cursor on next line. \x0a' 10 # '0a' 等价于Control-J, 换行. 11 echo >&2 12 13 ### 14 15 read -n 1 -s -p $'And Control-K\x0bgoes straight down.' 16 echo >&2 # Control-K 是垂直制表符. 17 18 # 关于垂直制表符效果的一个更好的例子见下边: 19 20 var=$'\x0aThis is the bottom line\x0bThis is the top line\x0a' 21 echo "$var" 22 # 这句与上边的例子使用的是同样的办法, 然而: 23 echo "$var" | col 24 # 这将造成垂直制表符右边的部分比左边部分高. 25 # 这也解释了为什么我们要在行首和行尾加上一个换行符 -- 26 #+ 这样可以避免屏幕显示混乱. 27 28 # Lee Maschmeyer的解释: 29 # -------------------------- 30 # 在这里[第一个垂直制表符的例子中] . . . 31 #+ 这个垂直制表符使得还没回车就直接打印下来. 32 # 这只能在那些不能"后退"的设备中才行, 33 #+ 比如说Linux的console. 34 # 垂直制表符的真正意义是向上移, 而不是向下. 35 # 它可以用来让打印机打印上标. 36 # col工具可以模拟垂直制表符的正确行为. 37 38 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 echo -e '\x0a' 2 echo <Ctl-V><Ctl-J></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 + -
显示快捷键?