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

📄 variables2.html

📁 Shall高级编程
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML><HEAD><TITLE>Variables Revisited</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="Advanced Bash-Scripting Guide"HREF="index.html"><LINKREL="UP"TITLE="Beyond the Basics"HREF="part3.html"><LINKREL="PREVIOUS"TITLE="Beyond the Basics"HREF="part3.html"><LINKREL="NEXT"TITLE="Manipulating Strings"HREF="string-manipulation.html"><METAHTTP-EQUIV="Content-Style-Type"CONTENT="text/css"><LINKREL="stylesheet"HREF="common/kde-common.css"TYPE="text/css"><METAHTTP-EQUIV="Content-Type"CONTENT="text/html; charset=iso-8859-1"><METAHTTP-EQUIV="Content-Language"CONTENT="en"><LINKREL="stylesheet"HREF="common/kde-localised.css"TYPE="text/css"TITLE="KDE-English"><LINKREL="stylesheet"HREF="common/kde-default.css"TYPE="text/css"TITLE="KDE-Default"></HEAD><BODYCLASS="CHAPTER"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#AA0000"VLINK="#AA0055"ALINK="#AA0000"STYLE="font-family: sans-serif;"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">Advanced Bash-Scripting Guide: An in-depth exploration of the art of shell scripting</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="part3.html"ACCESSKEY="P">Prev</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom"></TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="string-manipulation.html"ACCESSKEY="N">Next</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="CHAPTER"><H1><ANAME="VARIABLES2"></A>Chapter 9. Variables Revisited</H1><P>Used properly, variables can add power and flexibility	  to scripts. This requires learning their subtleties and	  nuances.</P><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="INTERNALVARIABLES"></A>9.1. Internal Variables</H1><DIVCLASS="VARIABLELIST"><DL><DT><TTCLASS="REPLACEABLE"><I><AHREF="internal.html#BUILTINREF">Builtin</A> variables</I></TT></DT><DD><P>variables affecting bash script behavior</P></DD><DT><ANAME="BASHVARREF"></A><TTCLASS="VARNAME">$BASH</TT></DT><DD><P>the path to the <ICLASS="FIRSTTERM">Bash</I>	    binary itself	      <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="SCREEN"> <TTCLASS="PROMPT">bash$ </TT><TTCLASS="USERINPUT"><B>echo $BASH</B></TT> <TTCLASS="COMPUTEROUTPUT">/bin/bash</TT></PRE></TD></TR></TABLE>	    </P></DD><DT><ANAME="BASHENVREF"></A><TTCLASS="VARNAME">$BASH_ENV</TT></DT><DD><P>an <AHREF="othertypesv.html#ENVREF">environmental	  variable</A> pointing to a Bash startup file to be read	  when a script is invoked</P></DD><DT><ANAME="BASHSUBSHELLREF"></A><TTCLASS="VARNAME">$BASH_SUBSHELL</TT></DT><DD><P>a variable indicating the <AHREF="subshells.html#SUBSHELLSREF">subshell</A> level. This is a	      new addition to Bash, <AHREF="bashver3.html#BASH3REF">version 3</A>.</P><P>See <AHREF="subshells.html#SUBSHELL">Example 20-1</A> for usage.</P></DD><DT><TTCLASS="VARNAME">$BASH_VERSINFO[n]</TT></DT><DD><P>a 6-element <AHREF="arrays.html#ARRAYREF">array</A>	    containing version information about the installed release	    of Bash. This is similar to <TTCLASS="VARNAME">$BASH_VERSION</TT>,	    below, but a bit more detailed.</P><P>	  <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="PROGRAMLISTING">   1&nbsp;# Bash version info:   2&nbsp;   3&nbsp;for n in 0 1 2 3 4 5   4&nbsp;do   5&nbsp;  echo "BASH_VERSINFO[$n] = ${BASH_VERSINFO[$n]}"   6&nbsp;done     7&nbsp;   8&nbsp;# BASH_VERSINFO[0] = 3                      # Major version no.   9&nbsp;# BASH_VERSINFO[1] = 00                     # Minor version no.  10&nbsp;# BASH_VERSINFO[2] = 14                     # Patch level.  11&nbsp;# BASH_VERSINFO[3] = 1                      # Build version.  12&nbsp;# BASH_VERSINFO[4] = release                # Release status.  13&nbsp;# BASH_VERSINFO[5] = i386-redhat-linux-gnu  # Architecture  14&nbsp;                                            # (same as $MACHTYPE).</PRE></TD></TR></TABLE>	  </P></DD><DT><TTCLASS="VARNAME">$BASH_VERSION</TT></DT><DD><P>the version of Bash installed on the system</P><P>	      <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="SCREEN"> <TTCLASS="PROMPT">bash$ </TT><TTCLASS="USERINPUT"><B>echo $BASH_VERSION</B></TT> <TTCLASS="COMPUTEROUTPUT">3.00.14(1)-release</TT> 	      </PRE></TD></TR></TABLE>	    </P><P>	      <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="SCREEN"> <TTCLASS="PROMPT">tcsh% </TT><TTCLASS="USERINPUT"><B>echo $BASH_VERSION</B></TT> <TTCLASS="COMPUTEROUTPUT">BASH_VERSION: Undefined variable.</TT> 	      </PRE></TD></TR></TABLE>	    </P><P>Checking $BASH_VERSION is a good method of determining which	    shell is running. <AHREF="variables2.html#SHELLVARREF">$SHELL</A>	    does not necessarily give the correct answer.</P></DD><DT><ANAME="DIRSTACKREF"></A><TTCLASS="VARNAME">$DIRSTACK</TT></DT><DD><P>the top value in the directory stack	    (affected by <AHREF="internal.html#PUSHDREF">pushd</A> and <AHREF="internal.html#POPDREF">popd</A>)</P><P>This builtin	    variable corresponds to the <AHREF="internal.html#DIRSD">dirs</A>	    command, however <BCLASS="COMMAND">dirs</B> shows the entire	    contents of the directory stack.</P></DD><DT><TTCLASS="VARNAME">$EDITOR</TT></DT><DD><P>the default editor invoked by a script, usually	      <BCLASS="COMMAND">vi</B> or <BCLASS="COMMAND">emacs</B>.</P></DD><DT><ANAME="EUIDREF"></A><TTCLASS="VARNAME">$EUID</TT></DT><DD><P><SPANCLASS="QUOTE">"effective"</SPAN> user ID number</P><P>Identification number of whatever identity the	      current user has assumed, perhaps by means of <AHREF="system.html#SUREF">su</A>.</P><DIVCLASS="CAUTION"><TABLECLASS="CAUTION"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="common/caution.png"HSPACE="5"ALT="Caution"></TD><TDALIGN="LEFT"VALIGN="TOP"><P>The <TTCLASS="VARNAME">$EUID</TT> is not necessarily	      the same as the <AHREF="variables2.html#UIDREF">$UID</A>.</P></TD></TR></TABLE></DIV></DD><DT><TTCLASS="VARNAME">$FUNCNAME</TT></DT><DD><P>name of the current function</P><P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="PROGRAMLISTING">   1&nbsp;xyz23 ()   2&nbsp;{   3&nbsp;  echo "$FUNCNAME now executing."  # xyz23 now executing.   4&nbsp;}   5&nbsp;   6&nbsp;xyz23   7&nbsp;   8&nbsp;echo "FUNCNAME = $FUNCNAME"        # FUNCNAME =   9&nbsp;                                   # Null value outside a function.</PRE></TD></TR></TABLE>            </P></DD><DT><TTCLASS="VARNAME">$GLOBIGNORE</TT></DT><DD><P>A list of filename patterns to be excluded from	    matching in <AHREF="globbingref.html">globbing</A>.</P></DD><DT><ANAME="GROUPSREF"></A><TTCLASS="VARNAME">$GROUPS</TT></DT><DD><P>groups current user belongs to</P><P>This is a listing (array) of the group id numbers for	      current user, as  recorded in	      <TTCLASS="FILENAME">/etc/passwd</TT> and	      <TTCLASS="FILENAME">/etc/group</TT>.	    </P><P>	      <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="SCREEN"> <TTCLASS="PROMPT">root# </TT><TTCLASS="USERINPUT"><B>echo $GROUPS</B></TT> <TTCLASS="COMPUTEROUTPUT">0</TT>   <TTCLASS="PROMPT">root# </TT><TTCLASS="USERINPUT"><B>echo ${GROUPS[1]}</B></TT> <TTCLASS="COMPUTEROUTPUT">1</TT>   <TTCLASS="PROMPT">root# </TT><TTCLASS="USERINPUT"><B>echo ${GROUPS[5]}</B></TT> <TTCLASS="COMPUTEROUTPUT">6</TT> 	      </PRE></TD></TR></TABLE>	      </P></DD><DT><ANAME="HOMEDIRREF"></A><TTCLASS="VARNAME">$HOME</TT></DT><DD><P>home directory of the user, usually <TTCLASS="FILENAME">/home/username</TT> (see <AHREF="parameter-substitution.html#EX6">Example 9-16</A>)</P></DD><DT><ANAME="HOSTNAMEREF"></A><TTCLASS="VARNAME">$HOSTNAME</TT></DT><DD><P>The <AHREF="system.html#HNAMEREF">hostname</A> command	    assigns the system host name at bootup in an init script.	    However, the <TTCLASS="FUNCTION">gethostname()</TT> function	    sets the Bash internal variable <TTCLASS="VARNAME">$HOSTNAME</TT>.	    See also <AHREF="parameter-substitution.html#EX6">Example 9-16</A>.</P></DD><DT><TTCLASS="VARNAME">$HOSTTYPE</TT></DT><DD><P>host type</P><P>Like <AHREF="variables2.html#MACHTYPEREF">$MACHTYPE</A>,	      identifies the system hardware.</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="SCREEN"> <TTCLASS="PROMPT">bash$ </TT><TTCLASS="USERINPUT"><B>echo $HOSTTYPE</B></TT> <TTCLASS="COMPUTEROUTPUT">i686</TT></PRE></TD></TR></TABLE></DD><DT><ANAME="IFSREF"></A><TTCLASS="VARNAME">$IFS</TT></DT><DD><P>internal field separator</P><P>This variable determines how Bash recognizes fields, or word	      boundaries, when it interprets character strings.</P><P><ANAME="IFSWS"></A></P><P>$IFS defaults to <AHREF="special-chars.html#WHITESPACEREF">whitespace</A> (space,	      tab, and newline), but may be changed, for example,	      to parse a comma-separated data file.  Note that	      <AHREF="variables2.html#APPREF">$*</A> uses the first	      character held in <TTCLASS="VARNAME">$IFS</TT>.  See <AHREF="quoting.html#WEIRDVARS">Example 5-1</A>.</P><P>	      <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="SCREEN"> <TTCLASS="PROMPT">bash$ </TT><TTCLASS="USERINPUT"><B>echo "$IFS"</B></TT> <TTCLASS="COMPUTEROUTPUT"></TT> <TTCLASS="COMPUTEROUTPUT">(With $IFS set to default, a blank line displays.)</TT> 	         <TTCLASS="PROMPT">bash$ </TT><TTCLASS="USERINPUT"><B>echo "$IFS" | cat -vte</B></TT> <TTCLASS="COMPUTEROUTPUT"> ^I$ $</TT> <TTCLASS="COMPUTEROUTPUT">(Show whitespace -- here space, ^I [horizontal tab],  and newline -- and display "$" at end-of-line.)</TT>    <TTCLASS="PROMPT">bash$ </TT><TTCLASS="USERINPUT"><B>bash -c 'set w x y z; IFS=":-;"; echo "$*"'</B></TT> <TTCLASS="COMPUTEROUTPUT">w:x:y:z</TT> <TTCLASS="COMPUTEROUTPUT">(Read commands from string and assign any arguments to pos params.)</TT> 	      </PRE></TD></TR></TABLE>	  </P><DIVCLASS="CAUTION"><TABLECLASS="CAUTION"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="common/caution.png"HSPACE="5"ALT="Caution"></TD><TDALIGN="LEFT"VALIGN="TOP"><P><TTCLASS="VARNAME">$IFS</TT> does not handle whitespace	    the same as it does other characters.	  <DIVCLASS="EXAMPLE"><HR><ANAME="IFSH"></A><P><B>Example 9-1. $IFS and whitespace</B></P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><PRECLASS="PROGRAMLISTING">   1&nbsp;#!/bin/bash   2&nbsp;# $IFS treats whitespace differently than other characters.   3&nbsp;   4&nbsp;output_args_one_per_line()   5&nbsp;{   6&nbsp;  for arg   7&nbsp;  do echo "[$arg]"   8&nbsp;  done   9&nbsp;}  10&nbsp;  11&nbsp;echo; echo "IFS=\" \""  12&nbsp;echo "-------"  13&nbsp;  14&nbsp;IFS=" "  15&nbsp;var=" a  b c   "  16&nbsp;output_args_one_per_line $var  # output_args_one_per_line `echo " a  b c   "`  17&nbsp;#  18&nbsp;# [a]  19&nbsp;# [b]  20&nbsp;# [c]  21&nbsp;  22&nbsp;  23&nbsp;echo; echo "IFS=:"  24&nbsp;echo "-----"  25&nbsp;  26&nbsp;IFS=:  27&nbsp;var=":a::b:c:::"               # Same as above, but substitute ":" for " ".  28&nbsp;output_args_one_per_line $var  29&nbsp;#  30&nbsp;# []  31&nbsp;# [a]  32&nbsp;# []  33&nbsp;# [b]  34&nbsp;# [c]  35&nbsp;# []  36&nbsp;# []  37&nbsp;# []  38&nbsp;  39&nbsp;# The same thing happens with the "FS" field separator in awk.  40&nbsp;  41&nbsp;# Thank you, Stephane Chazelas.  42&nbsp;  43&nbsp;echo  44&nbsp;  45&nbsp;exit 0</PRE></TD></TR></TABLE><HR></DIV>	  </P></TD></TR></TABLE></DIV><P>(Many thanks, St閜hane Chazelas, for clarification and examples.)</P><P>See also <AHREF="communications.html#ISSPAMMER">Example 15-40</A>, <AHREF="loops.html#BINGREP">Example 10-7</A>, and <AHREF="here-docs.html#MAILBOXGREP">Example 18-14</A>             for instructive examples of using             <TTCLASS="VARNAME">$IFS</TT>.</P></DD><DT><TTCLASS="VARNAME">$IGNOREEOF</TT></DT><DD><P>ignore EOF: how many end-of-files (control-D)	    the shell will ignore before logging out.</P></DD><DT><TTCLASS="VARNAME">$LC_COLLATE</TT></DT><DD><P>Often set in the <TTCLASS="FILENAME">.bashrc</TT> or	    <TTCLASS="FILENAME">/etc/profile</TT> files, this	    variable controls collation order in filename	    expansion and pattern matching. If mishandled,	    <TTCLASS="VARNAME">LC_COLLATE</TT> can cause unexpected results	    in <AHREF="globbingref.html">filename	    globbing</A>.</P><DIVCLASS="NOTE"><TABLECLASS="NOTE"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="common/note.png"

⌨️ 快捷键说明

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