mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-26 14:20:59 +00:00
Added the beginnings of GIB documentation.
This commit is contained in:
parent
72e5221f06
commit
00b3083a57
3 changed files with 2032 additions and 0 deletions
910
doc/gib/GIB.lyx
Normal file
910
doc/gib/GIB.lyx
Normal file
|
@ -0,0 +1,910 @@
|
|||
#LyX 1.3 created this file. For more info see http://www.lyx.org/
|
||||
\lyxformat 221
|
||||
\textclass article
|
||||
\language english
|
||||
\inputencoding auto
|
||||
\fontscheme default
|
||||
\graphics default
|
||||
\float_placement !htb
|
||||
\paperfontsize default
|
||||
\spacing single
|
||||
\papersize Default
|
||||
\paperpackage a4
|
||||
\use_geometry 0
|
||||
\use_amsmath 0
|
||||
\use_natbib 0
|
||||
\use_numerical_citations 0
|
||||
\paperorientation portrait
|
||||
\secnumdepth 3
|
||||
\tocdepth 3
|
||||
\paragraph_separation indent
|
||||
\defskip medskip
|
||||
\quotes_language english
|
||||
\quotes_times 2
|
||||
\papercolumns 1
|
||||
\papersides 1
|
||||
\paperpagestyle default
|
||||
|
||||
\layout Title
|
||||
|
||||
|
||||
\begin_inset Graphics
|
||||
filename gib_head.eps
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\newline
|
||||
|
||||
\family sans
|
||||
\series bold
|
||||
The GIB Scripting Language
|
||||
\layout Author
|
||||
|
||||
Brian Koropoff
|
||||
\layout Date
|
||||
|
||||
21 February 2003
|
||||
\layout Standard
|
||||
\pagebreak_top \pagebreak_bottom
|
||||
|
||||
\begin_inset LatexCommand \tableofcontents{}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Section
|
||||
|
||||
Introduction
|
||||
\layout Subsection
|
||||
|
||||
Purpose and Applications
|
||||
\layout Standard
|
||||
|
||||
GIB
|
||||
\begin_inset Foot
|
||||
collapsed true
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\noun on
|
||||
GIB
|
||||
\noun default
|
||||
stands for
|
||||
\begin_inset Quotes eld
|
||||
\end_inset
|
||||
|
||||
|
||||
\series bold
|
||||
G
|
||||
\series default
|
||||
IB
|
||||
\series bold
|
||||
I
|
||||
\series default
|
||||
sn't
|
||||
\series bold
|
||||
\noun on
|
||||
B
|
||||
\series default
|
||||
ash
|
||||
\noun default
|
||||
.
|
||||
\begin_inset Quotes erd
|
||||
\end_inset
|
||||
|
||||
Bash is the GNU implementation of the UNIX shell, with which GIB shares
|
||||
many similarities.
|
||||
\end_inset
|
||||
|
||||
is a scripting language first introduced in
|
||||
\noun on
|
||||
QuakeForge
|
||||
\noun default
|
||||
0.5.2, although it existed in several (less successful) incarnations in the
|
||||
CVS development tree before finding its way into a release.
|
||||
I created it out of frustration at the limited abilities of the standard
|
||||
|
||||
\noun on
|
||||
Quake
|
||||
\noun default
|
||||
console for client-side scripting.
|
||||
The language that resulted now has applications ranging from glorified
|
||||
aliases to server-side chat bots and map voting scripts.
|
||||
\layout Subsection
|
||||
|
||||
Features
|
||||
\layout Standard
|
||||
|
||||
Some of GIB's more noteworthy features include:
|
||||
\layout Itemize
|
||||
|
||||
Full branching and looping support, including
|
||||
\family typewriter
|
||||
if-else
|
||||
\family default
|
||||
,
|
||||
\family typewriter
|
||||
while
|
||||
\family default
|
||||
, and
|
||||
\family typewriter
|
||||
for
|
||||
\family default
|
||||
structures.
|
||||
\layout Itemize
|
||||
|
||||
Local and global variables, arrays, and hashes (all rolled into one, see
|
||||
Section
|
||||
\begin_inset LatexCommand \vref{sec:variables}
|
||||
|
||||
\end_inset
|
||||
|
||||
for details) as well as access to standard console variables.
|
||||
\layout Itemize
|
||||
|
||||
A full-featured math evaluator supporting correct order of operations and
|
||||
most arithmetic, logical, and bitwise operators.
|
||||
\layout Itemize
|
||||
|
||||
Functions that can be passed any number of arguments and return any number
|
||||
of values to the caller.
|
||||
\layout Itemize
|
||||
|
||||
File and directory access.
|
||||
\layout Itemize
|
||||
|
||||
String manipulation functions, including regular expressions.
|
||||
\layout Itemize
|
||||
|
||||
|
||||
\begin_inset Quotes eld
|
||||
\end_inset
|
||||
|
||||
Cooperative
|
||||
\begin_inset Quotes erd
|
||||
\end_inset
|
||||
|
||||
threading.
|
||||
\layout Itemize
|
||||
|
||||
An event system, wherein GIB functions can be run when a certain event occurs,
|
||||
such as a chat message being received or the player's health changing.
|
||||
\layout Itemize
|
||||
\pagebreak_bottom
|
||||
Integration with the console.
|
||||
Console commands can be used from GIB, and GIB functions can be
|
||||
\begin_inset Quotes eld
|
||||
\end_inset
|
||||
|
||||
exported
|
||||
\begin_inset Quotes erd
|
||||
\end_inset
|
||||
|
||||
to the console as normal commands.
|
||||
\layout Section
|
||||
|
||||
Language Basics
|
||||
\layout Subsection
|
||||
|
||||
Command Syntax
|
||||
\layout Standard
|
||||
|
||||
GIB follows the same syntax for basic commands as the standard Quake console:
|
||||
the command, followed by any number of spaces and a space-separated list
|
||||
of arguments.
|
||||
Consider the following console command, which is also a legitimate GIB
|
||||
command:
|
||||
\layout LyX-Code
|
||||
|
||||
echo Hello world!
|
||||
\layout Standard
|
||||
|
||||
Each command is usually placed on a separate line, but a semicolon (
|
||||
\family typewriter
|
||||
;
|
||||
\family default
|
||||
) may be used to separate multiple commands on a single line:
|
||||
\layout LyX-Code
|
||||
|
||||
echo This is a command; echo ...and so is this!
|
||||
\layout Subsection
|
||||
|
||||
Enclosing Arguments
|
||||
\layout Standard
|
||||
|
||||
A normal argument is considered to end at the first
|
||||
\begin_inset Quotes eld
|
||||
\end_inset
|
||||
|
||||
whitespace
|
||||
\begin_inset Quotes erd
|
||||
\end_inset
|
||||
|
||||
character or comma (see Section
|
||||
\begin_inset LatexCommand \ref{sub:concat}
|
||||
|
||||
\end_inset
|
||||
|
||||
) encountered.
|
||||
Arguments may be optionally enclosed in certain characters to either define
|
||||
their boundaries or specify special processing to be done before the command
|
||||
is run.
|
||||
\layout Subsubsection
|
||||
|
||||
Double Quotes
|
||||
\layout Standard
|
||||
|
||||
An argument may be enclosed in double quotes (
|
||||
\family typewriter
|
||||
"
|
||||
\family default
|
||||
and
|
||||
\family typewriter
|
||||
"
|
||||
\family default
|
||||
, never smart quotes!), in which case the argument consists of all characters
|
||||
within the quotes, including any spaces.
|
||||
For example:
|
||||
\layout LyX-Code
|
||||
|
||||
print "Hello, world!"
|
||||
\layout Standard
|
||||
\added_space_bottom bigskip
|
||||
In addition, special processing is done to arguments in quotes to allow
|
||||
the inclusion of characters that can't normally be typed.
|
||||
If a character is preceded by a backslash (
|
||||
\family typewriter
|
||||
|
||||
\backslash
|
||||
|
||||
\family default
|
||||
), the backslash and the character will be replaced with a special character.
|
||||
This is referred to as
|
||||
\begin_inset Quotes eld
|
||||
\end_inset
|
||||
|
||||
escaping.
|
||||
\begin_inset Quotes erd
|
||||
\end_inset
|
||||
|
||||
Figure
|
||||
\begin_inset LatexCommand \vref{cap:escapes}
|
||||
|
||||
\end_inset
|
||||
|
||||
lists possible characters and their replacements.
|
||||
\layout Standard
|
||||
|
||||
|
||||
\begin_inset Float figure
|
||||
wide false
|
||||
collapsed false
|
||||
|
||||
\layout Standard
|
||||
\align center
|
||||
|
||||
\begin_inset Tabular
|
||||
<lyxtabular version="3" rows="6" columns="2">
|
||||
<features>
|
||||
<column alignment="center" valignment="top" leftline="true" width="0in">
|
||||
<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
|
||||
<row topline="true" bottomline="true">
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family sans
|
||||
\series bold
|
||||
Character
|
||||
\end_inset
|
||||
</cell>
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family sans
|
||||
\series bold
|
||||
Replacement
|
||||
\end_inset
|
||||
</cell>
|
||||
</row>
|
||||
<row topline="true">
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family typewriter
|
||||
n
|
||||
\end_inset
|
||||
</cell>
|
||||
<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family sans
|
||||
Newline
|
||||
\end_inset
|
||||
</cell>
|
||||
</row>
|
||||
<row topline="true">
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family typewriter
|
||||
t
|
||||
\end_inset
|
||||
</cell>
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family sans
|
||||
Tab
|
||||
\end_inset
|
||||
</cell>
|
||||
</row>
|
||||
<row topline="true">
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family typewriter
|
||||
r
|
||||
\end_inset
|
||||
</cell>
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family sans
|
||||
Carriage return
|
||||
\end_inset
|
||||
</cell>
|
||||
</row>
|
||||
<row topline="true">
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family typewriter
|
||||
"
|
||||
\end_inset
|
||||
</cell>
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family sans
|
||||
Double quote (does not end argument)
|
||||
\end_inset
|
||||
</cell>
|
||||
</row>
|
||||
<row topline="true" bottomline="true">
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family typewriter
|
||||
|
||||
\backslash
|
||||
|
||||
\end_inset
|
||||
</cell>
|
||||
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
||||
\begin_inset Text
|
||||
|
||||
\layout Standard
|
||||
|
||||
|
||||
\family sans
|
||||
Backslash (does not escape next character)
|
||||
\end_inset
|
||||
</cell>
|
||||
</row>
|
||||
</lyxtabular>
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Caption
|
||||
|
||||
Escape characters
|
||||
\begin_inset LatexCommand \label{cap:escapes}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Standard
|
||||
\added_space_top bigskip
|
||||
The code example above could be rewritten to include a newline character
|
||||
so that printing will continue on the next line:
|
||||
\layout LyX-Code
|
||||
|
||||
print "Hello, world!
|
||||
\backslash
|
||||
n"
|
||||
\layout Standard
|
||||
\added_space_bottom bigskip
|
||||
Besides a single character, a backslash can be followed by three digits
|
||||
forming a decimal number between 0 and 255, in which case the backslash
|
||||
and all digits are replaced by the character with the value of the number.
|
||||
\layout Standard
|
||||
\line_top \line_bottom \align left
|
||||
|
||||
\family sans
|
||||
\series bold
|
||||
Warning:
|
||||
\series default
|
||||
\emph on
|
||||
Attempting to send any string with the character of decimal value 255 over
|
||||
the network will result in a malformed packet and an immediate loss of
|
||||
connection.
|
||||
Do not use
|
||||
\family typewriter
|
||||
"
|
||||
\backslash
|
||||
255"
|
||||
\family sans
|
||||
in any chat message, info string, or any other text sent between the client
|
||||
and server.
|
||||
\layout Standard
|
||||
\added_space_top bigskip
|
||||
Double quotes must be evenly matched, or a parse error will be issued when
|
||||
GIB attempts to execute the script.
|
||||
\layout Subsubsection
|
||||
|
||||
Parentheses
|
||||
\layout Standard
|
||||
|
||||
An argument may be enclosed within parentheses, in which case the argument
|
||||
will be evaluated as a mathematical expression and will be replaced with
|
||||
the result of that expression.
|
||||
Consider the following code:
|
||||
\layout LyX-Code
|
||||
|
||||
echo (1/(1+1))
|
||||
\layout Standard
|
||||
|
||||
This will result in
|
||||
\family typewriter
|
||||
\series bold
|
||||
0.5
|
||||
\family default
|
||||
\series default
|
||||
being printed.
|
||||
For a detailed explanation of the capabilities of the math evaluator, please
|
||||
see Section .
|
||||
As with double quotes, parentheses must be evenly matched or a parse error
|
||||
will be issued.
|
||||
\layout Subsubsection
|
||||
|
||||
Curly Braces
|
||||
\layout Standard
|
||||
|
||||
Arguments within curly braces (
|
||||
\family typewriter
|
||||
{
|
||||
\family default
|
||||
and
|
||||
\family typewriter
|
||||
}
|
||||
\family default
|
||||
) are treated as
|
||||
\emph on
|
||||
program blocks
|
||||
\emph default
|
||||
, or groups of GIB commands.
|
||||
To facilitate readable formatting of code, line breaks are allowed within
|
||||
curly braces.
|
||||
Curly braces should only be used where GIB code is called for, such as
|
||||
in a loop or function definition.
|
||||
Arguments in curly braces
|
||||
\series bold
|
||||
may
|
||||
\series default
|
||||
be used for any purpose, but this comes with two drawbacks:
|
||||
\layout Enumerate
|
||||
|
||||
Arguments in curly braces are considered code and will be held to those
|
||||
standards.
|
||||
Parse errors within curly braces will prevent execution of your script,
|
||||
even if the argument is not used where a program block is requested.
|
||||
\layout Enumerate
|
||||
|
||||
The GIB parser will convert code in curly braces to an internal representation,
|
||||
which is a waste of time and resources if the argument is never used as
|
||||
a program block.
|
||||
\layout Standard
|
||||
|
||||
|
||||
\begin_inset Float figure
|
||||
wide false
|
||||
collapsed false
|
||||
|
||||
\layout LyX-Code
|
||||
\line_top \line_bottom
|
||||
|
||||
\begin_inset Include \verbatiminput{curly.gib}
|
||||
preview false
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Caption
|
||||
|
||||
Example uses of curly braces
|
||||
\begin_inset LatexCommand \label{cap:curly}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Standard
|
||||
|
||||
Figure
|
||||
\begin_inset LatexCommand \vref{cap:curly}
|
||||
|
||||
\end_inset
|
||||
|
||||
uses features that will be discussed later, but it demonstrates several
|
||||
of the intended uses of curly braces.
|
||||
\layout Subsection
|
||||
|
||||
Concatenation
|
||||
\begin_inset LatexCommand \label{sub:concat}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Standard
|
||||
|
||||
Concatenation refers to joining one argument onto the end of another.
|
||||
This is useful when you want to combine different arguments into one, such
|
||||
as a double-quoted argument and a math expression.
|
||||
To do this, simply place a single comma (
|
||||
\family typewriter
|
||||
,
|
||||
\family default
|
||||
) anywhere between arguments.
|
||||
Example:
|
||||
\layout LyX-Code
|
||||
|
||||
print "20 divided by 4 is ", (20/4), "
|
||||
\backslash
|
||||
n"
|
||||
\layout Standard
|
||||
\pagebreak_bottom
|
||||
Concatenation will not work with curly-brace-enclosed arguments.
|
||||
In addition, it will not work or simply be ignored on instances of variable
|
||||
expansion, which will be discussed in Section
|
||||
\begin_inset LatexCommand \ref{sec:variables}
|
||||
|
||||
\end_inset
|
||||
|
||||
.
|
||||
\layout Section
|
||||
|
||||
Variables
|
||||
\begin_inset LatexCommand \label{sec:variables}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Subsection
|
||||
|
||||
Types and Concepts
|
||||
\layout Standard
|
||||
|
||||
GIB offers several powerful forms of variables:
|
||||
\layout Description
|
||||
|
||||
Console\SpecialChar ~
|
||||
variables hold a character string and can also be accessed from the
|
||||
|
||||
\noun on
|
||||
QuakeForge
|
||||
\noun default
|
||||
console.
|
||||
\layout Description
|
||||
|
||||
Standard\SpecialChar ~
|
||||
variables hold a character string.
|
||||
\layout Description
|
||||
|
||||
Arrays hold a numbered list of character strings, each referred to as an
|
||||
|
||||
\emph on
|
||||
element
|
||||
\emph default
|
||||
.
|
||||
\layout Description
|
||||
|
||||
Hashes hold a list of arrays, each referenced by a unique name called a
|
||||
|
||||
\emph on
|
||||
key
|
||||
\emph default
|
||||
.
|
||||
\layout Standard
|
||||
|
||||
Unlike many other languages, these different types of variables are not
|
||||
defined separately.
|
||||
Rather, all non-console GIB variables are a hash/array hybrid.
|
||||
Every variable is an array, and every element in that array also can be
|
||||
a hash.
|
||||
This may sound confusing at first, but it is actually quite intuitive and
|
||||
powerful.
|
||||
\layout Standard
|
||||
|
||||
Variables in GIB can be used in three different ways:
|
||||
\layout Itemize
|
||||
|
||||
|
||||
\series bold
|
||||
Assignment
|
||||
\series default
|
||||
|
||||
\newline
|
||||
A value (character string) is stored in the variable.
|
||||
\layout Itemize
|
||||
|
||||
|
||||
\series bold
|
||||
Embedding
|
||||
\series default
|
||||
|
||||
\newline
|
||||
The value of a variable is placed somewhere within an argument
|
||||
\layout Itemize
|
||||
|
||||
|
||||
\series bold
|
||||
Expansion
|
||||
\series default
|
||||
|
||||
\newline
|
||||
A new argument is created in the command for each element of an array or
|
||||
each key in a hash.
|
||||
\layout Standard
|
||||
|
||||
Note that console variables cannot be expanded, as they may only hold one
|
||||
value.
|
||||
\layout Subsection
|
||||
|
||||
Console Variables
|
||||
\layout Standard
|
||||
|
||||
Console variables are the normal settings used at the
|
||||
\noun on
|
||||
QuakeForge
|
||||
\noun default
|
||||
console, such as
|
||||
\family typewriter
|
||||
in_mouse_amp
|
||||
\family default
|
||||
,
|
||||
\family typewriter
|
||||
fov
|
||||
\family default
|
||||
, etc.
|
||||
These are the simplest variables available to GIB.
|
||||
\layout Subsubsection
|
||||
|
||||
Assigning to Console Variables
|
||||
\layout Standard
|
||||
|
||||
To assign to a console variable from GIB, you simply use the
|
||||
\family typewriter
|
||||
set
|
||||
\family default
|
||||
console command with the name of the console variable as the first argument
|
||||
and the value to assign as the second.
|
||||
Example:
|
||||
\layout LyX-Code
|
||||
|
||||
set fov 90.0
|
||||
\layout Subsubsection
|
||||
|
||||
Embedding Console Variables
|
||||
\layout Standard
|
||||
|
||||
To embed the value of a console variable in an argument, include the name
|
||||
of the variable preceeded by a dollar sign (
|
||||
\family typewriter
|
||||
$
|
||||
\family default
|
||||
).
|
||||
This only works within normal arguments or parenthesis-enclosed arguments.
|
||||
Examples:
|
||||
\layout LyX-Code
|
||||
|
||||
echo The current field of vision is $fov degrees.
|
||||
\layout LyX-Code
|
||||
|
||||
echo Zoom factor: (90.0/$fov)
|
||||
\layout Standard
|
||||
|
||||
The name of the variable is considered to span from after the dollar sign
|
||||
to before the first non-alphanumeric, non-underline character.
|
||||
Example:
|
||||
\layout LyX-Code
|
||||
|
||||
echo Your mouse sensitivity is currently $in_mouse_amp.
|
||||
\layout Standard
|
||||
|
||||
The command above will result in the current mouse sensitivity being printed,
|
||||
as
|
||||
\family typewriter
|
||||
in_mouse_amp
|
||||
\family default
|
||||
consists of only letters and underlines.
|
||||
The period at the end of the sentence is not a number, letter, or underline,
|
||||
and thus is not counted as part of the variable name, even though it is
|
||||
part of the last argument.
|
||||
\layout Standard
|
||||
|
||||
To use variables with unusual names, or to separate the name of a variable
|
||||
from surrounding alphanumeric characters, enclose the name of the variable
|
||||
in curly braces.
|
||||
Examples:
|
||||
\layout LyX-Code
|
||||
|
||||
echo The variable with the name /
|
||||
\backslash
|
||||
/
|
||||
\backslash
|
||||
/
|
||||
\backslash
|
||||
has the value ${/
|
||||
\backslash
|
||||
/
|
||||
\backslash
|
||||
/
|
||||
\backslash
|
||||
}.
|
||||
\layout LyX-Code
|
||||
|
||||
echo Thecurrentfieldofvisionis${fov}degrees.Wheredidmyspacebargo?
|
||||
\layout Subsection
|
||||
|
||||
Standard Variables
|
||||
\begin_inset LatexCommand \label{sub:stdvars}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Standard
|
||||
|
||||
As noted before, all non-console GIB variables are also arrays.
|
||||
However, their array properties can be ignored for simplicity, in which
|
||||
case the first element of an array is used for storing and retrieving a
|
||||
value.
|
||||
\layout Subsubsection
|
||||
|
||||
Assigning to Standard Variables
|
||||
\begin_inset LatexCommand \label{sub:assignstandard}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Standard
|
||||
|
||||
To assign to a standard variable, begin a command with the name of the variable,
|
||||
followed by any number of spaces and an equals (
|
||||
\family typewriter
|
||||
=
|
||||
\family default
|
||||
) sign, followed by any non-program-block argument.
|
||||
Example:
|
||||
\layout LyX-Code
|
||||
|
||||
foo = "bar"
|
||||
\layout Standard
|
||||
|
||||
The above example will store
|
||||
\begin_inset Quotes eld
|
||||
\end_inset
|
||||
|
||||
bar
|
||||
\begin_inset Quotes erd
|
||||
\end_inset
|
||||
|
||||
in the variable
|
||||
\begin_inset Quotes eld
|
||||
\end_inset
|
||||
|
||||
foo
|
||||
\begin_inset Quotes erd
|
||||
\end_inset
|
||||
|
||||
.
|
||||
\layout Subsubsection
|
||||
|
||||
Embedding Standard Variables
|
||||
\layout Standard
|
||||
|
||||
Standard variables are embedded the same way as console variables: a dollar
|
||||
sign, followed by the name of the variable or the name of the variable
|
||||
in curly braces.
|
||||
To display the stored value in the example in Section
|
||||
\begin_inset LatexCommand \ref{sub:assignstandard}
|
||||
|
||||
\end_inset
|
||||
|
||||
, simply do:
|
||||
\layout LyX-Code
|
||||
|
||||
echo $foo
|
||||
\layout Subsection
|
||||
|
||||
Arrays
|
||||
\layout Standard
|
||||
|
||||
Arrays are simply an extension of standard variables.
|
||||
They are divided into numbered elements beginning at 0.
|
||||
\layout Subsubsection
|
||||
|
||||
Assigning to Arrays
|
||||
\layout Standard
|
||||
|
||||
Assignment to arrays is the same as assignment to standard variables, except
|
||||
that you specify the element of the array to which you which to assign.
|
||||
In fact, all standard variables
|
||||
\emph on
|
||||
are
|
||||
\emph default
|
||||
arrays.
|
||||
When the element is not specified, it defaults to element 0.
|
||||
All examples in section
|
||||
\begin_inset LatexCommand \ref{sub:stdvars}
|
||||
|
||||
\end_inset
|
||||
|
||||
are use the zeroth element of an array via this default behavior.
|
||||
To specify a specific element, follow name of the variable by the element
|
||||
number enclosed in brackets (
|
||||
\family typewriter
|
||||
[
|
||||
\family default
|
||||
and
|
||||
\family typewriter
|
||||
]
|
||||
\family default
|
||||
).
|
||||
Example:
|
||||
\layout LyX-Code
|
||||
|
||||
foo[2] = "Hello!"
|
||||
\layout Standard
|
||||
|
||||
\the_end
|
5
doc/gib/curly.gib
Normal file
5
doc/gib/curly.gib
Normal file
|
@ -0,0 +1,5 @@
|
|||
function hello {
|
||||
for word in "hello" "world" {
|
||||
echo $word
|
||||
}
|
||||
}
|
1117
doc/gib/gib_head.eps
Normal file
1117
doc/gib/gib_head.eps
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue