📄 ch45_28.htm
字号:
><ACLASS="indexterm"NAME="AUTOID-54439"></A></P></DD></DL></DD><DTCLASS="term">Logical operators</DT><DDCLASS="listitem"><PCLASS="para">Use these to compare two arguments. Depending on the values,the result written to standard outputcan be <CODECLASS="replaceable"><I>arg1</I></CODE> (or some portion of it), <CODECLASS="replaceable"><I>arg2</I></CODE>, or 0.The symbols <CODECLASS="literal">|</CODE> and <CODECLASS="literal">&</CODE> must be escaped.</P><DLCLASS="variablelist"><DTCLASS="term"><CODECLASS="literal">|</CODE></DT><DDCLASS="listitem"><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-54456"></A>Logical OR; if <CODECLASS="replaceable"><I>arg1</I></CODE> has a non-zero (and non-null) value,the output is <CODECLASS="replaceable"><I>arg1</I></CODE>; otherwise, the output is <CODECLASS="replaceable"><I>arg2</I></CODE>.</P></DD><DTCLASS="term"><CODECLASS="literal">&</CODE></DT><DDCLASS="listitem"><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-54467"></A>Logical AND; if both <CODECLASS="replaceable"><I>arg1</I></CODE> and <CODECLASS="replaceable"><I>arg2</I></CODE> have a non-zero (and non-null) value, the output is <CODECLASS="replaceable"><I>arg1</I></CODE>; otherwise, the output is 0.</P></DD><DTCLASS="term"><CODECLASS="literal">:</CODE></DT><DDCLASS="listitem"><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-54478"></A>Sort of like<SPANCLASS="link"><EMCLASS="emphasis">grep</EM> (<ACLASS="linkend"HREF="ch27_01.htm#UPT-ART-7420"TITLE="Different Versions of grep ">27.1</A>)</SPAN>;<CODECLASS="replaceable"><I>arg2</I></CODE> is a pattern to search for in <CODECLASS="replaceable"><I>arg1</I></CODE>.<CODECLASS="replaceable"><I>arg2</I></CODE> must be a regular expression in this case. If the <CODECLASS="replaceable"><I>arg2</I></CODE> patternis enclosed in <CODECLASS="literal">\( \)</CODE>, the output is the portion of <CODECLASS="replaceable"><I>arg1</I></CODE> that matches;otherwise, the output is simply the number of characters that match. A pattern match always applies to the beginning of the argument (the <CODECLASS="literal">^</CODE> symbol is assumed by default).</P></DD></DL></DD></DL><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="UPT-ART-4030-SECT-1.0.1">45.28.1 Examples </A></H3><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-54493"></A><ACLASS="indexterm"NAME="AUTOID-54496"></A><ACLASS="indexterm"NAME="AUTOID-54499"></A><ACLASS="indexterm"NAME="AUTOID-54502"></A><ACLASS="indexterm"NAME="AUTOID-54505"></A>Division happens first; output is 10:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr 5 + 10 / 2</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">Addition happens first; output is 7 (truncated from 7.5):</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr \( 5 + 10 \) / 2</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">Add 1 to variable <EMCLASS="emphasis">i</EM>; this is how variables are incremented inBourne shell scripts:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen"><CODECLASS="userinput"><B>i=`expr "$i" + 1`</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-54521"></A><ACLASS="indexterm"NAME="AUTOID-54524"></A>Output 1 (true) if variable <EMCLASS="emphasis">a</EM> is the string "hello":</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr "$a" = hello</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">Output 1 (true) if variable <EMCLASS="emphasis">b</EM> plus 5 equals 10 or more:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr "$b" + 5 \>= 10</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para"> In the examples below, variable <EMCLASS="emphasis">p</EM> is the string "version.100". This command returns the number of characters in <EMCLASS="emphasis">p</EM>:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen"><ACLASS="indexterm"NAME="AUTOID-54541"></A>$ <CODECLASS="userinput"><B>expr "$p" : '.*'</B></CODE> <ICLASS="lineannotation">Output is 11</I></PRE></BLOCKQUOTE></P><PCLASS="para">Match all characters and print them:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr "$p" : '\(.*\)'</B></CODE> <ICLASS="lineannotation">Output is "version.100"</I></PRE></BLOCKQUOTE></P><PCLASS="para">Output the number of lowercase letters matched:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr "$p" : '[a-z]*'</B></CODE> <ICLASS="lineannotation">Output is 7</I></PRE></BLOCKQUOTE></P><PCLASS="para">Match a string of lowercase letters:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr "$p" : '\([a-z]*\)'</B></CODE> <ICLASS="lineannotation">Output is \"version"</I></PRE></BLOCKQUOTE></P><PCLASS="para">Truncate <CODECLASS="literal">$x</CODE> if it contains five or more characters; if not, just output <CODECLASS="literal">$x</CODE>. (Logical OR uses the second argument whenthe first one is 0 or null; i.e., when the match fails.)</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$ <CODECLASS="userinput"><B>expr "$x" : '\(.....\)' "$x"</B></CODE></PRE></BLOCKQUOTE></P></DIV><DIVCLASS="sect1info"><PCLASS="SECT1INFO">- <SPANCLASS="authorinitials">DG</SPAN> <SPANCLASS="bibliomisc">from O'Reilly & Associates' <CITECLASS="citetitle">UNIX in a Nutshell (SVR4/Solaris)</CITE></SPAN></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch45_27.htm"TITLE='45.27 Turn Off echo for "Secret" Answers'><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT='Previous: 45.27 Turn Off echo for "Secret" Answers'BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="book"HREF="index.htm"TITLE="UNIX Power Tools"><IMGSRC="gifs/txthome.gif"SRC="gifs/txthome.gif"ALT="UNIX Power Tools"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch45_29.htm"TITLE="45.29 Testing Characters in a String with expr "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 45.29 Testing Characters in a String with expr "BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">45.27 Turn Off echo for "Secret" Answers</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="index"HREF="index/idx_0.htm"TITLE="Book Index"><IMGSRC="gifs/index.gif"SRC="gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172">45.29 Testing Characters in a String with expr </TD></TR></TABLE><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><IMGSRC="gifs/smnavbar.gif"SRC="gifs/smnavbar.gif"USEMAP="#map"BORDER="0"ALT="The UNIX CD Bookshelf Navigation"><MAPNAME="map"><AREASHAPE="RECT"COORDS="0,0,73,21"HREF="../index.htm"ALT="The UNIX CD Bookshelf"><AREASHAPE="RECT"COORDS="74,0,163,21"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="164,0,257,21"HREF="../unixnut/index.htm"ALT="UNIX in a Nutshell"><AREASHAPE="RECT"COORDS="258,0,321,21"HREF="../vi/index.htm"ALT="Learning the vi Editor"><AREASHAPE="RECT"COORDS="322,0,378,21"HREF="../sedawk/index.htm"ALT="sed & awk"><AREASHAPE="RECT"COORDS="379,0,438,21"HREF="../ksh/index.htm"ALT="Learning the Korn Shell"><AREASHAPE="RECT"COORDS="439,0,514,21"HREF="../lrnunix/index.htm"ALT="Learning the UNIX Operating System"></MAP></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -