bashver3.html
来自「BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版」· HTML 代码 · 共 471 行
HTML
471 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD><TITLE>Bash, 版本3</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINKREL="HOME"TITLE="高级Bash脚本编程指南"HREF="index.html"><LINKREL="UP"TITLE="Bash, 版本2与版本3"HREF="bash2.html"><LINKREL="PREVIOUS"TITLE="Bash, 版本2"HREF="bashver2.html"><LINKREL="NEXT"TITLE="后记"HREF="endnotes.html"></HEAD><BODYCLASS="SECT1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">高级Bash脚本编程指南: 一本深入学习shell脚本艺术的书籍</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="bashver2.html"ACCESSKEY="P">前一页</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">34. Bash, 版本2与版本3</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="endnotes.html"ACCESSKEY="N">下一页</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="BASHVER3">34.2. Bash, 版本3</A></H1><P><ANAME="BASH3REF"></A></P><P>2004年7月27日, Chet Ramey发布了Bash版本3. 这一版本修复了相当多的bug, 并加入了一些新特性. </P><P>新增加的一些属性有: <P></P><UL><LI><P>一个新的, 更加通用的<BCLASS="COMMAND">{a..z}</B><AHREF="special-chars.html#BRACEEXPREF">大括号扩展</A>操作符. <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING"> 1 #!/bin/bash 2 3 for i in {1..10} 4 # 比下面的方式更简单, 更直接 5 #+ for i in $(seq 10) 6 do 7 echo -n "$i " 8 done 9 10 echo 11 12 # 1 2 3 4 5 6 7 8 9 10</PRE></FONT></TD></TR></TABLE> </P></LI><LI><P><BCLASS="COMMAND">${!array[@]}</B>操作符, 用于扩展给定<AHREF="arrays.html#ARRAYREF">数组</A>所有元素索引. <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING"> 1 #!/bin/bash 2 3 Array=(element-zero element-one element-two element-three) 4 5 echo ${Array[0]} # 元素0 6 # 数组的第一个元素. 7 8 echo ${!Array[@]} # 0 1 2 3 9 # 数组的全部索引. 10 11 for i in ${!Array[@]} 12 do 13 echo ${Array[i]} # 元素0 14 # 元素1 15 # 元素2 16 # 元素3 17 # 18 # 数组的全部元素. 19 done</PRE></FONT></TD></TR></TABLE> </P></LI><LI><P><ANAME="REGEXMATCHREF"></A></P><P><BCLASS="COMMAND">=~</B> <AHREF="regexp.html#REGEXREF">正则表达式</A>匹配操作符, 在<AHREF="testconstructs.html#DBLBRACKETS">双中括号</A>测试表达式中的应用. (Perl也有一个类似的操作符. )</P><P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING"> 1 #!/bin/bash 2 3 variable="This is a fine mess." 4 5 echo "$variable" 6 7 if [[ "$variable" =~ "T*fin*es*" ]] 8 # 在[[ 双中括号 ]]中使用=~操作符进行正则匹配. 9 then 10 echo "match found" 11 # match found 12 fi</PRE></FONT></TD></TR></TABLE></P><P>或者, 更有用的用法: </P><P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING"> 1 #!/bin/bash 2 3 input=$1 4 5 6 if [[ "$input" =~ "[1-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]] 7 # NNN-NN-NNNN 8 # 每个N都是一个数字. 9 # 但是, 第一个数字不能为0. 10 then 11 echo "Social Security number." 12 # 处理SSN. 13 else 14 echo "Not a Social Security number!" 15 # 或者, 要求正确的输入. 16 fi</PRE></FONT></TD></TR></TABLE></P><P>还有一个使用<BCLASS="COMMAND">=~</B>操作符的例子, 请参考<AHREF="contributed-scripts.html#WHX">例子 A-29</A>和<AHREF="x13628.html#MAILBOXGREP">例子 17-14</A>. </P></LI></UL> </P><DIVCLASS="CAUTION"><P></P><TABLECLASS="CAUTION"WIDTH="100%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/caution.gif"HSPACE="5"ALT="Caution"></TD><TDALIGN="LEFT"VALIGN="TOP"><P>Bash 3.0版本的更新, 将会导致一小部分为早期Bash版本编写的脚本不能工作. <EM>对于一些重要的早期脚本来说, 需要进行测试, 以保证它们在新版本的Bash中也可以正常工作!</EM></P><P>如果发生确实不能正常工作的情况, 那么<EM>高级Bash脚本编程指南</EM>中的某些脚本就必须被修复(请参考<AHREF="contributed-scripts.html#OBJORIENTED">例子 A-20</A>和<AHREF="internalvariables.html#TOUT">例子 9-4</A>). </P></TD></TR></TABLE></DIV><DIVCLASS="SECT2"><H2CLASS="SECT2"><ANAME="AEN16211">34.2.1. Bash, 版本3.1</A></H2><P>Bash3.1版本的更新修复了一部分bug, 并且在其他方面也做了一些小的修改. </P><P></P><UL><LI><P><SPANCLASS="TOKEN">+=</SPAN>操作符是新添加的, 可以放在之前只能有<SPANCLASS="TOKEN">=</SPAN>赋值操作符出现的地方. </P><P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING"> 1 a=1 2 echo $a # 1 3 4 a+=5 # 在Bash的早期版本中就不行, 只能运行在Bash3.1或更新的版本上. 5 echo $a # 15 6 7 a+=Hello 8 echo $a # 15Hello</PRE></FONT></TD></TR></TABLE> </P><P>在这里, <SPANCLASS="TOKEN">+=</SPAN>是作为<ICLASS="FIRSTTERM">字符串连接</I>操作符. 注意, 它在这种特定的上下文中所表现出来的行为, 与在<AHREF="internal.html#LETREF">let</A>结构中所表现出来的行为是不同的. </P><P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING"> 1 a=1 2 echo $a # 1 3 4 let a+=5 # 整数的算术运算, 而不是字符串连接. 5 echo $a # 6 6 7 let a+=Hello # 不会给a"添加"任何东西. 8 echo $a # 6</PRE></FONT></TD></TR></TABLE> </P></LI></UL></DIV></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="bashver2.html"ACCESSKEY="P">前一页</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">首页</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="endnotes.html"ACCESSKEY="N">下一页</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">Bash, 版本2</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="bash2.html"ACCESSKEY="U">上一级</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">后记</TD></TR></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?