⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autobook_217.html

📁 Autoconf使用手册
💻 HTML
字号:
<HTML><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><!-- Created on September, 12  2004 by texi2html 1.64 --><!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)            Karl Berry  <karl@freefriends.org>            Olaf Bachmann <obachman@mathematik.uni-kl.de>            and many others.Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> --><HEAD><TITLE>Autoconf, Automake, and Libtool: Variables</TITLE><META NAME="description" CONTENT="Autoconf, Automake, and Libtool: Variables"><META NAME="keywords" CONTENT="Autoconf, Automake, and Libtool: Variables"><META NAME="resource-type" CONTENT="document"><META NAME="distribution" CONTENT="global"><META NAME="Generator" CONTENT="texi2html 1.64"><script language="Javascript"><!--    // Check the browser version.    function checkVersion() {      if (navigator.appVersion.charAt(0)>=3) return true;      if (navigator.appVersion.charAt(0)>=4) return true;      else return false;    }      if (checkVersion()) {             homeon = new Image();             homeon.src = "homeon.png";             homeoff = new Image();             homeoff.src = "home.png";             tocon = new Image();             tocon.src = "tocon.png";             tocoff = new Image();             tocoff.src = "toc.png";             indexon = new Image();             indexon.src = "indexon.png";             indexoff = new Image();             indexoff.src = "index.png";             helpon = new Image();             helpon.src = "helpon.png";             helpoff = new Image();             helpoff.src = "help.png";             backon = new Image();             backon.src = "backon.png";             backoff = new Image();             backoff.src = "back.png";             forwardon = new Image();             forwardon.src = "forwardon.png";             forwardoff = new Image();             forwardoff.src = "forward.png";             prevon = new Image();             prevon.src = "prevon.png";             prevoff = new Image();             prevoff.src = "prev.png";             nexton = new Image();             nexton.src = "nexton.png";             nextoff = new Image();             nextoff.src = "next.png";             upon = new Image();             upon.src = "upon.png";             upoff = new Image();             upoff.src = "up.png";         }     function img_act(imgName) {             if (checkVersion()) {             imgOn = eval(imgName + "on.src");             document [imgName].src = imgOn;             }     }     function img_inact(imgName) {             if (checkVersion()) {             imgOff = eval(imgName + "off.src");             document [imgName].src = imgOff;             }     }// --></SCRIPT></HEAD><BODY LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#6688AA" VLINK="#336688" ALINK="#808080"><A NAME="SEC217"></A><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10><TR VALIGN="TOP"><TD ALIGN="MIDDLE" WIDTH=50 BGCOLOR="#e6e6e6"><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_216.html#SEC216" onMouseover="img_act('prev')" onMouseout="img_inact('prev')"><IMG SRC="prev.png" BORDER="0" ALT="Back: Test" ALIGN="MIDDLE" NAME="prev"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_218.html#SEC218" onMouseover="img_act('next')" onMouseout="img_inact('next')"><IMG SRC="next.png" BORDER="0" ALT="Forward: Pattern Matching" ALIGN="MIDDLE" NAME="next"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_218.html#SEC218" onMouseover="img_act('back')" onMouseout="img_inact('back')"><IMG SRC="back.png" BORDER="0" ALT="FastBack: Pattern Matching" ALIGN="MIDDLE" NAME="back"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_210.html#SEC210" onMouseover="img_act('up')" onMouseout="img_inact('up')"><IMG SRC="up.png" BORDER="0" ALT="Up: Sh Implementation" ALIGN="MIDDLE" NAME="up"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_219.html#SEC219" onMouseover="img_act('forward')" onMouseout="img_inact('forward')"><IMG SRC="forward.png" BORDER="0" ALT="FastForward: Environment" ALIGN="MIDDLE" NAME="forward"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook.html#SEC_Top" onMouseover="img_act('home')" onMouseout="img_inact('home')"><IMG SRC="home.png" BORDER="0" ALT="Top: Autoconf, Automake, and Libtool" ALIGN="MIDDLE" NAME="home"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_toc.html#SEC_Contents" onMouseover="img_act('toc')" onMouseout="img_inact('toc')"><IMG SRC="toc.png" BORDER="0" ALT="Contents: Table of Contents" ALIGN="MIDDLE" NAME="toc"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_285.html#SEC285" onMouseover="img_act('index')" onMouseout="img_inact('index')"><IMG SRC="index.png" BORDER="0" ALT="Index: Index" ALIGN="MIDDLE" NAME="index"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_abt.html#SEC_About" onMouseover="img_act('help')" onMouseout="img_inact('help')"><IMG SRC="help.png" BORDER="0" ALT="About: About this document" ALIGN="MIDDLE" NAME="help"></A></TD></TR></TABLE></TD><TD ALIGN="LEFT"><H3> 22.2.7 $ </H3><!--docid::SEC217::--><P>When using shell variables in your portable scripts, you need to writethem in a somewhat stylised fashion to maximise the number ofshell implementations that will interpret your code as expected:<UL><LI>Convenient though it is, the POSIX <SAMP>`$(command parameters)'</SAMP>syntax for command substitution is not remotely portable.  Despite itbeing more difficult to nest, you must use<SAMP>``command parameters`'</SAMP> instead.<P><LI>The most portable way to set a default value for a shell variable is:<P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>$ echo ${no_such_var-"default value"}default value</pre></td></tr></table></P><P>If there is any whitespace in the default value, as there is here, youmust be careful to quote the entire value, since some shells will raisean error:</P><P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>$ echo ${no_such_var-default value}sh: bad substitution</pre></td></tr></table></P><P><LI>The <CODE>unset</CODE> command is not available in many of the degenerateBourne shell implementations.  Generally, it is not too difficult to getby without it, but following the logic that led to the shell script in<A HREF="autobook_214.html#SEC214">()</A>, it would be trivial to extend the test case forconfirming a shell's suitability to include a check for <CODE>unset</CODE>.Although it has not been put to the test, the theory is that all theinteresting machines in use today have <EM>some</EM> shell that supports<CODE>unset</CODE>.<P><LI>Be religious about double quoting variable expansions.  Using<SAMP>`"$foo"'</SAMP> will avoid trouble with unexpected spaces in filenames,and compression of all whitespace to a single space in unquoted variableexpansions.<P><LI>To avoid accidental interpretation of variable expansions as commandoptions you can use the following technique:<P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>$ foo=-n$ echo $foo$ echo x"$foo" | sed -e 's/^x//'-n</pre></td></tr></table></P><P><LI>If it is set, <CODE>IFS</CODE> splits words on whitespace by default.  If youchange it, be sure to put it back when you're done, or the shell maybehave very strangely from that point.  For example, when you need toexamine each element of <SAMP>`$PATH'</SAMP> in turn:<P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre># The whitespace at the end of the following line is a space# followed by literal tab and newline characters.save_IFS="${IFS=}"; IFS=":"set dummy $PATHIFS="$save_IFS"shift</pre></td></tr></table></P><P>Alternatively, you can take advantage of the fact that commandsubstitutions occur in a separate subshell, and do not corrupt theenvironment of the calling shell:</P><P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>set dummy `IFS=:; echo $PATH`shift</pre></td></tr></table></P><P>Strictly speaking, the <SAMP>`dummy'</SAMP> argument is required to stop the<CODE>set</CODE> command from interpreting the first word of the expandedbackquote expression as a command option.Realistically, no one is going to have <SAMP>`-x'</SAMP>, for example, as thefirst element of their <SAMP>`PATH'</SAMP> variable, so the <SAMP>`dummy'</SAMP> couldbe omitted -- as I did earlier in the script in <A HREF="autobook_214.html#SEC214">()</A>.</P><P><LI>Some shells expand <SAMP>`$@'</SAMP> to the empty string, even when there areno actual parameters (<SAMP>`$#'</SAMP> is 0).  If you need to replicate theparameters that were passed to the executing script, when feeding thescript to a more suitable interpreter for example, you must use thefollowing:<P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>${1+"$@"}</pre></td></tr></table></P><P>Similarly, although all known shells do correctly use <SAMP>`$@'</SAMP> as thedefault argument to a <CODE>for</CODE> command, you must write it like this:</P><P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>for argdo  stuffdone</pre></td></tr></table></P><P>When you rely on implicit <SAMP>`$@'</SAMP> like this, it is important to writethe <CODE>do</CODE> keyword on a separate line.  Some degenerate shellscan not parse the following:</P><P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>for arg; do  stuffdone</pre></td></tr></table></UL><P><A NAME="Pattern Matching"></A></TR></TABLE><BR>  <FONT SIZE="-1">This document was generatedby <I>Gary V. Vaughan</I> on <I>September, 12  2004</I>using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html"><I>texi2html</I></A></BODY></HTML>

⌨️ 快捷键说明

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