complete initial implementation of nofork command substitution (${ command; })

This commit is contained in:
Chet Ramey
2023-05-15 13:30:18 -04:00
parent c375f8f45f
commit e44e3d50de
42 changed files with 4387 additions and 3516 deletions
+29
View File
@@ -6302,3 +6302,32 @@ subst.c
param_expand: call extract_function_subst as appropriate
- function_substitute: like command_substitute, but for nofork command
substitutions. Just a stub for now
5/11
----
jobs.[ch]
- pipeline_saver: already_making_children now saved and restored as
part of the struct; no longer need a separate variable
- save_pipeline,restore_pipeline: save already_making_children to struct
parse.y
- parse_comsub,xparse_dolparen: handle `(' as the first char of a
funsub (ksh93 supports that)
subst.c
- function_substitute: complete implementation; handle both funsubs
and valsubs (need different terminology); dummy up a fake shell
function so local variables and `return' work; do the right thing
with process groups
- executing_funsub: flag for the rest of the shell to know we're
expanding a funsub; used by parse_and_execute
builtins/evalstring.c
- parse_and_execute: check executing_funsub to do the right thing with
alias expansion and posix mode
5/12
----
doc/bash.1,doc/bashref.texi
- function substitution (or lambda substitution, or nofork command
substitution): document
+5
View File
@@ -1013,6 +1013,10 @@ tests/comsub4.sub f
tests/comsub5.sub f
tests/comsub6.sub f
tests/comsub7.sub f
tests/comsub2.tests f
tests/comsub2.right f
tests/comsub21.sub f
tests/comsub22.sub f
tests/comsub-eof.tests f
tests/comsub-eof0.sub f
tests/comsub-eof1.sub f
@@ -1411,6 +1415,7 @@ tests/run-case f
tests/run-casemod f
tests/run-complete f
tests/run-comsub f
tests/run-comsub2 f
tests/run-comsub-eof f
tests/run-comsub-posix f
tests/run-cond f
+2 -2
View File
@@ -531,7 +531,7 @@ parse_and_execute (char *string, const char *from_file, int flags)
the global value of the flag (expaliases_flag) changes). */
local_expalias = expand_aliases;
local_alflag = expaliases_flag;
if (subshell_environment & SUBSHELL_COMSUB)
if ((subshell_environment & SUBSHELL_COMSUB) || executing_funsub)
expand_aliases = expaliases_flag;
/* See if this is a candidate for $( <file ). */
@@ -552,7 +552,7 @@ parse_and_execute (char *string, const char *from_file, int flags)
discard_unwind_frame ("pe_dispose");
/* If the global value didn't change, we restore what we had. */
if ((subshell_environment & SUBSHELL_COMSUB) && local_alflag == expaliases_flag)
if (((subshell_environment & SUBSHELL_COMSUB) || executing_funsub) && local_alflag == expaliases_flag)
expand_aliases = local_expalias;
if (flags & SEVAL_ONECMD)
+2100 -2067
View File
File diff suppressed because it is too large Load Diff
+50 -8
View File
@@ -5,12 +5,12 @@
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
.\" Last Change: Mon Apr 17 10:35:39 EDT 2023
.\" Last Change: Sun May 14 15:32:59 EDT 2023
.\"
.\" bash_builtins, strip all but Built-Ins section
.if \n(zZ=1 .ig zZ
.if \n(zY=1 .ig zY
.TH BASH 1 "2023 April 17" "GNU Bash 5.2"
.TH BASH 1 "2023 May 14" "GNU Bash 5.2"
.\"
.\" There's some problem with having a `@'
.\" in a tagged paragraph with the BSD man macros.
@@ -3581,14 +3581,15 @@ expansion as described below.
.RE
.SS Command Substitution
\fICommand substitution\fP allows the output of a command to replace
the command name. There are two forms:
the command itself.
There are two standard forms:
.RS
.PP
\fB$(\fP\fIcommand\fP\|\fB)\fP
.RE
or
or (deprecated)
.RS
\fB\`\fP\fIcommand\fP\fB\`\fP
\fB\`\fP\fIcommand\fP\fB\`\fP.
.RE
.PP
.B Bash
@@ -3600,7 +3601,7 @@ word splitting.
The command substitution \fB$(cat \fIfile\fP)\fR can be replaced by
the equivalent but faster \fB$(< \fIfile\fP)\fR.
.PP
When the old-style backquote form of substitution is used,
With the old-style backquote form of substitution,
backslash retains its literal meaning except when followed by
.BR $ ,
.BR \` ,
@@ -3611,11 +3612,52 @@ command substitution.
When using the $(\^\fIcommand\fP\|) form, all characters between the
parentheses make up the command; none are treated specially.
.PP
There is an alternate form of command substitution:
.RS
.PP
\fB${\fP\fIC\fP \fIcommand\fP\fB;\fP\|\fB}\fP
.RE
.PP
which executes \fIcommand\fP in the current execution environment.
This means that side effects of \fIcommand\fP take effect immediately
in the current execution environment and persist in the current
environment after the command completes (e.g., the \fBexit\fP builtin
will exit the shell).
.PP
The character \fIC\fP following the open brace must be a space, tab,
newline, \fB(\fP, or \fB|\fP, and the close brace must be in a position
where a reserved word may appear (i.e., preceded by a command terminator
such as semicolon).
\fBBash\fP allows the close brace to be joined to the remaining characters in
the word without being followed by a shell metacharacter as a reserved
word would usually require.
.PP
This type of command substitution superficially resembles executing an
unnamed shell function: local variables are created as when a shell
function is executing, and the \fBreturn\fP builtin forces
\fIcommand\fP to complete;
however, the rest of the execution environment,
including the positional parameters, is shared with the caller.
.PP
If the first character following the open brace is a \fB(\fP,
\fIcommand\fP is executed in a subshell, and \fIcommand\fP must be
terminated by a \fB)\fP. This is similar to the \fB(\fP compound
command (see \fBCompound Commands\fP above).
If the first character is a \fB|\fP, the construct expands to the
value of the \fBREPLY\fP shell variable after \fIcommand\fP executes,
without removing any trailing newlines,
and the standard output of \fIcommand\fP remains the same as in the
calling shell.
\fBBash\fP creates \fBREPLY\fP as an initially-unset local variable when
\fIcommand\fP executes, and restores \fBREPLY\fP to the value it had
before the command substitution after \fIcommand\fP completes,
as with any local variable.
.PP
Command substitutions may be nested. To nest when using the backquoted form,
escape the inner backquotes with backslashes.
.PP
If the substitution appears within double quotes, word splitting and
pathname expansion are not performed on the results.
If the substitution appears within double quotes, \fBbash\fP does not perform
word splitting and pathname expansion on the results.
.SS Arithmetic Expansion
Arithmetic expansion allows the evaluation of an arithmetic expression
and the substitution of the result. The format for arithmetic expansion is:
+63 -12
View File
@@ -3,7 +3,7 @@
</HEAD>
<BODY><TABLE WIDTH=100%>
<TR>
<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2023 April 17<TH ALIGN=RIGHT width=33%>BASH(1)
<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2023 May 14<TH ALIGN=RIGHT width=33%>BASH(1)
</TR>
</TABLE>
<BR><A HREF="#index">Index</A>
@@ -2869,8 +2869,10 @@ and
which sort the files on name, file size, modification time, access time,
inode change time, and number of blocks, respectively.
For example, a value of <B>-mtime</B> sorts the results in descending
For example, a value of <I>-mtime</I> sorts the results in descending
order by modification time (newest first).
A sort specifier of <I>nosort</I> disables sorting completely; the results
are returned in the order they are read from the file system,.
If the sort specifier is missing, it defaults to <I>name</I>,
so a value of <I>+</I> is equivalent to the null string,
and a value of <I>-</I> sorts by name in descending order.
@@ -4463,16 +4465,17 @@ expansion as described below.
<H4>Command Substitution</H4>
<I>Command substitution</I> allows the output of a command to replace
the command name. There are two forms:
the command itself.
There are two standard forms:
<DL COMPACT><DT><DD>
<P>
<B>$(</B><I>command</I><B>)</B>
</DL>
or
or (deprecated)
<DL COMPACT><DT><DD>
<B>`</B><I>command</I><B>`</B>
<B>`</B><I>command</I><B>`</B>.
</DL>
<P>
@@ -4488,7 +4491,7 @@ The command substitution <B>$(cat </B><I>file</I>) can be replaced by
the equivalent but faster <B>$(&lt; </B><I>file</I>).
<P>
When the old-style backquote form of substitution is used,
With the old-style backquote form of substitution,
backslash retains its literal meaning except when followed by
<B>$</B>,
@@ -4503,12 +4506,60 @@ When using the $(<I>command</I>) form, all characters between the
parentheses make up the command; none are treated specially.
<P>
There is an alternate form of command substitution:
<DL COMPACT><DT><DD>
<P>
<B>${</B><I>C</I> <I>command</I><B>;</B><B>}</B>
</DL>
<P>
which executes <I>command</I> in the current execution environment.
This means that side effects of <I>command</I> take effect immediately
in the current execution environment and persist in the current
environment after the command completes (e.g., the <B>exit</B> builtin
will exit the shell).
<P>
The character <I>C</I> following the open brace must be a space, tab,
newline, <B>(</B>, or <B>|</B>, and the close brace must be in a position
where a reserved word may appear (i.e., preceded by a command terminator
such as semicolon).
<B>Bash</B> allows the close brace to be joined to the remaining characters in
the word without being followed by a shell metacharacter as a reserved
word would usually require.
<P>
This type of command substitution superficially resembles executing an
unnamed shell function: local variables are created as when a shell
function is executing, and the <B>return</B> builtin forces
<I>command</I> to complete;
however, the rest of the execution environment,
including the positional parameters, is shared with the caller.
<P>
If the first character following the open brace is a <B>(</B>,
<I>command</I> is executed in a subshell, and <I>command</I> must be
terminated by a <B>)</B>. This is similar to the <B>(</B> compound
command (see <B>Compound Commands</B> above).
If the first character is a <B>|</B>, the construct expands to the
value of the <B>REPLY</B> shell variable after <I>command</I> executes,
without removing any trailing newlines,
and the standard output of <I>command</I> remains the same as in the
calling shell.
<B>Bash</B> creates <B>REPLY</B> as an initially-unset local variable when
<I>command</I> executes, and restores <B>REPLY</B> to the value it had
before the command substitution after <I>command</I> completes,
as with any local variable.
<P>
Command substitutions may be nested. To nest when using the backquoted form,
escape the inner backquotes with backslashes.
<P>
If the substitution appears within double quotes, word splitting and
pathname expansion are not performed on the results.
If the substitution appears within double quotes, <B>bash</B> does not perform
word splitting and pathname expansion on the results.
<A NAME="lbBD">&nbsp;</A>
<H4>Arithmetic Expansion</H4>
@@ -11999,7 +12050,7 @@ in the same way as <B>echo -e</B>.
<DD>
causes <B>printf</B> to output the corresponding
<I>argument</I> in a format that can be reused as shell input.
<B>%q</B> and <B>%Q</B> use the <B>$''</B> quoting style if any characters
<B>%q</B> and <B>%Q</B> use the <B>$aqaq</B> quoting style if any characters
in the argument string require it, and backslash quoting otherwise.
If the format string uses the <I>printf</I> alternate form, these two
formats quote the argument string using single quotes.
@@ -14944,7 +14995,7 @@ There may be only one active coprocess at a time.
<HR>
<TABLE WIDTH=100%>
<TR>
<TH ALIGN=LEFT width=33%>GNU Bash 5.2<TH ALIGN=CENTER width=33%>2023 April 17<TH ALIGN=RIGHT width=33%>BASH(1)
<TH ALIGN=LEFT width=33%>GNU Bash 5.2<TH ALIGN=CENTER width=33%>2023 May 14<TH ALIGN=RIGHT width=33%>BASH(1)
</TR>
</TABLE>
<HR>
@@ -15050,7 +15101,7 @@ There may be only one active coprocess at a time.
<DT><A HREF="#lbDI">BUGS</A><DD>
</DL>
<HR>
This document was created by man2html from bash.1.<BR>
Time: 18 April 2023 10:26:09 EDT
This document was created by man2html from /usr/local/src/bash/bash-20230509/doc/bash.1.<BR>
Time: 14 May 2023 15:37:14 EDT
</BODY>
</HTML>
+194 -147
View File
@@ -1,9 +1,9 @@
This is bash.info, produced by makeinfo version 6.8 from bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.2, 20 April 2023).
Bash shell (version 5.2, 14 May 2023).
This is Edition 5.2, last updated 20 April 2023, of 'The GNU Bash
This is Edition 5.2, last updated 14 May 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.2.
Copyright (C) 1988-2023 Free Software Foundation, Inc.
@@ -26,10 +26,10 @@ Bash Features
*************
This text is a brief description of the features that are present in the
Bash shell (version 5.2, 20 April 2023). The Bash home page is
Bash shell (version 5.2, 14 May 2023). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.2, last updated 20 April 2023, of 'The GNU Bash
This is Edition 5.2, last updated 14 May 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.2.
Bash contains features that appear in other popular shells, and some
@@ -418,8 +418,8 @@ File: bash.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double
3.1.2.4 ANSI-C Quoting
......................
Character sequences of the form $'STRING' are treated as a special kind
of single quotes. The sequence expands to STRING, with
Character sequences of the form '$'STRING'' are treated as a special
kind of single quotes. The sequence expands to STRING, with
backslash-escaped characters in STRING replaced as specified by the ANSI
C standard. Backslash escape sequences, if present, are decoded as
follows:
@@ -2239,11 +2239,11 @@ File: bash.info, Node: Command Substitution, Next: Arithmetic Expansion, Prev
--------------------------
Command substitution allows the output of a command to replace the
command itself. Command substitution occurs when a command is enclosed
as follows:
command itself. The standard form of command substitution occurs when a
command is enclosed as follows:
$(COMMAND)
or
`COMMAND`
or (deprecated)
`COMMAND`.
Bash performs the expansion by executing COMMAND in a subshell
environment and replacing the command substitution with the standard
@@ -2252,17 +2252,64 @@ newlines are not deleted, but they may be removed during word splitting.
The command substitution '$(cat FILE)' can be replaced by the equivalent
but faster '$(< FILE)'.
When the old-style backquote form of substitution is used, backslash
retains its literal meaning except when followed by '$', '`', or '\'.
The first backquote not preceded by a backslash terminates the command
With the old-style backquote form of substitution, backslash retains
its literal meaning except when followed by '$', '`', or '\'. The first
backquote not preceded by a backslash terminates the command
substitution. When using the '$(COMMAND)' form, all characters between
the parentheses make up the command; none are treated specially.
There is an alternate form of command substitution:
${C COMMAND; }
which executes COMMAND in the current execution environment. This means
that side effects of COMMAND take effect immediately in the current
execution environment and persist in the current environment after the
command completes (e.g., the 'exit' builtin will exit the shell).
The character C following the open brace must be a space, tab,
newline, '(', or '|', and the close brace must be in a position where a
reserved word may appear (i.e., preceded by a command terminator such as
semicolon). Bash allows the close brace to be joined to the remaining
characters in the word without being followed by a shell metacharacter
as a reserved word would usually require.
This type of command substitution superficially resembles executing
an unnamed shell function: local variables are created as when a shell
function is executing, and the 'return' builtin forces COMMAND to
complete; however, the rest of the execution environment, including the
positional parameters, is shared with the caller.
If the first character following the open brace is a '(', COMMAND is
executed in a subshell, and COMMAND must be terminated by a ')'. This
is similar to the '(' compound command (*note Command Grouping::). If
the first character is a '|', the construct expands to the value of the
'REPLY' shell variable after COMMAND executes, without removing any
trailing newlines, and the standard output of COMMAND remains the same
as in the calling shell. Bash creates 'REPLY' as an initially-unset
local variable when COMMAND executes, and restores 'REPLY' to the value
it had before the command substitution after COMMAND completes, as with
any local variable.
For example, this construct expands to '12345', and leaves the shell
variable 'X' unchanged in the current execution environment:
${ local X=12345 ; echo $X; }
(not declaring 'X' as local would modify its value in the current
environment, as with normal shell function execution), while this
construct does not require any output to expand to '12345':
${| REPLY=12345; }
and restores 'REPLY' to the value it had before the command
substitution.
Command substitutions may be nested. To nest when using the
backquoted form, escape the inner backquotes with backslashes.
If the substitution appears within double quotes, word splitting and
filename expansion are not performed on the results.
If the substitution appears within double quotes, Bash does not
perform word splitting and filename expansion on the results.

File: bash.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions
@@ -12706,138 +12753,138 @@ D.5 Concept Index

Tag Table:
Node: Top888
Node: Introduction2799
Node: What is Bash?3012
Node: What is a shell?4123
Node: Definitions6658
Node: Basic Shell Features9606
Node: Shell Syntax10822
Node: Shell Operation11845
Node: Quoting13135
Node: Escape Character14436
Node: Single Quotes14918
Node: Double Quotes15263
Node: ANSI-C Quoting16538
Node: Locale Translation17845
Node: Creating Internationalized Scripts19153
Node: Comments23267
Node: Shell Commands23882
Node: Reserved Words24817
Node: Simple Commands25570
Node: Pipelines26221
Node: Lists29217
Node: Compound Commands31009
Node: Looping Constructs32018
Node: Conditional Constructs34510
Node: Command Grouping48995
Node: Coprocesses50470
Node: GNU Parallel53130
Node: Shell Functions54044
Node: Shell Parameters61926
Node: Positional Parameters66311
Node: Special Parameters67210
Node: Shell Expansions70421
Node: Brace Expansion72545
Node: Tilde Expansion75276
Node: Shell Parameter Expansion77894
Node: Command Substitution96293
Node: Arithmetic Expansion97645
Node: Process Substitution98610
Node: Word Splitting99727
Node: Filename Expansion101772
Node: Pattern Matching104702
Node: Quote Removal109701
Node: Redirections109993
Node: Executing Commands119683
Node: Simple Command Expansion120350
Node: Command Search and Execution122457
Node: Command Execution Environment124841
Node: Environment127873
Node: Exit Status129533
Node: Signals131314
Node: Shell Scripts134760
Node: Shell Builtin Commands137784
Node: Bourne Shell Builtins139819
Node: Bash Builtins162015
Node: Modifying Shell Behavior194011
Node: The Set Builtin194353
Node: The Shopt Builtin204948
Node: Special Builtins220857
Node: Shell Variables221833
Node: Bourne Shell Variables222267
Node: Bash Variables224368
Node: Bash Features258430
Node: Invoking Bash259440
Node: Bash Startup Files265450
Node: Interactive Shells270578
Node: What is an Interactive Shell?270986
Node: Is this Shell Interactive?271632
Node: Interactive Shell Behavior272444
Node: Bash Conditional Expressions276070
Node: Shell Arithmetic280709
Node: Aliases283667
Node: Arrays286558
Node: The Directory Stack293118
Node: Directory Stack Builtins293899
Node: Controlling the Prompt298156
Node: The Restricted Shell301118
Node: Bash POSIX Mode303725
Node: Shell Compatibility Mode319515
Node: Job Control327756
Node: Job Control Basics328213
Node: Job Control Builtins333212
Node: Job Control Variables339004
Node: Command Line Editing340157
Node: Introduction and Notation341825
Node: Readline Interaction343445
Node: Readline Bare Essentials344633
Node: Readline Movement Commands346419
Node: Readline Killing Commands347376
Node: Readline Arguments349294
Node: Searching350335
Node: Readline Init File352518
Node: Readline Init File Syntax353776
Node: Conditional Init Constructs377564
Node: Sample Init File381757
Node: Bindable Readline Commands384878
Node: Commands For Moving386079
Node: Commands For History388127
Node: Commands For Text393118
Node: Commands For Killing396764
Node: Numeric Arguments399794
Node: Commands For Completion400930
Node: Keyboard Macros405118
Node: Miscellaneous Commands405803
Node: Readline vi Mode411838
Node: Programmable Completion412742
Node: Programmable Completion Builtins420519
Node: A Programmable Completion Example431504
Node: Using History Interactively436749
Node: Bash History Facilities437430
Node: Bash History Builtins440432
Node: History Interaction445453
Node: Event Designators449070
Node: Word Designators450421
Node: Modifiers452178
Node: Installing Bash453983
Node: Basic Installation455117
Node: Compilers and Options458836
Node: Compiling For Multiple Architectures459574
Node: Installation Names461263
Node: Specifying the System Type463369
Node: Sharing Defaults464083
Node: Operation Controls464753
Node: Optional Features465708
Node: Reporting Bugs476924
Node: Major Differences From The Bourne Shell478255
Node: GNU Free Documentation License495101
Node: Indexes520275
Node: Builtin Index520726
Node: Reserved Word Index527550
Node: Variable Index529995
Node: Function Index546980
Node: Concept Index560761
Node: Top884
Node: Introduction2791
Node: What is Bash?3004
Node: What is a shell?4115
Node: Definitions6650
Node: Basic Shell Features9598
Node: Shell Syntax10814
Node: Shell Operation11837
Node: Quoting13127
Node: Escape Character14428
Node: Single Quotes14910
Node: Double Quotes15255
Node: ANSI-C Quoting16530
Node: Locale Translation17839
Node: Creating Internationalized Scripts19147
Node: Comments23261
Node: Shell Commands23876
Node: Reserved Words24811
Node: Simple Commands25564
Node: Pipelines26215
Node: Lists29211
Node: Compound Commands31003
Node: Looping Constructs32012
Node: Conditional Constructs34504
Node: Command Grouping48989
Node: Coprocesses50464
Node: GNU Parallel53124
Node: Shell Functions54038
Node: Shell Parameters61920
Node: Positional Parameters66305
Node: Special Parameters67204
Node: Shell Expansions70415
Node: Brace Expansion72539
Node: Tilde Expansion75270
Node: Shell Parameter Expansion77888
Node: Command Substitution96287
Node: Arithmetic Expansion99876
Node: Process Substitution100841
Node: Word Splitting101958
Node: Filename Expansion104003
Node: Pattern Matching106933
Node: Quote Removal111932
Node: Redirections112224
Node: Executing Commands121914
Node: Simple Command Expansion122581
Node: Command Search and Execution124688
Node: Command Execution Environment127072
Node: Environment130104
Node: Exit Status131764
Node: Signals133545
Node: Shell Scripts136991
Node: Shell Builtin Commands140015
Node: Bourne Shell Builtins142050
Node: Bash Builtins164246
Node: Modifying Shell Behavior196242
Node: The Set Builtin196584
Node: The Shopt Builtin207179
Node: Special Builtins223088
Node: Shell Variables224064
Node: Bourne Shell Variables224498
Node: Bash Variables226599
Node: Bash Features260661
Node: Invoking Bash261671
Node: Bash Startup Files267681
Node: Interactive Shells272809
Node: What is an Interactive Shell?273217
Node: Is this Shell Interactive?273863
Node: Interactive Shell Behavior274675
Node: Bash Conditional Expressions278301
Node: Shell Arithmetic282940
Node: Aliases285898
Node: Arrays288789
Node: The Directory Stack295349
Node: Directory Stack Builtins296130
Node: Controlling the Prompt300387
Node: The Restricted Shell303349
Node: Bash POSIX Mode305956
Node: Shell Compatibility Mode321746
Node: Job Control329987
Node: Job Control Basics330444
Node: Job Control Builtins335443
Node: Job Control Variables341235
Node: Command Line Editing342388
Node: Introduction and Notation344056
Node: Readline Interaction345676
Node: Readline Bare Essentials346864
Node: Readline Movement Commands348650
Node: Readline Killing Commands349607
Node: Readline Arguments351525
Node: Searching352566
Node: Readline Init File354749
Node: Readline Init File Syntax356007
Node: Conditional Init Constructs379795
Node: Sample Init File383988
Node: Bindable Readline Commands387109
Node: Commands For Moving388310
Node: Commands For History390358
Node: Commands For Text395349
Node: Commands For Killing398995
Node: Numeric Arguments402025
Node: Commands For Completion403161
Node: Keyboard Macros407349
Node: Miscellaneous Commands408034
Node: Readline vi Mode414069
Node: Programmable Completion414973
Node: Programmable Completion Builtins422750
Node: A Programmable Completion Example433735
Node: Using History Interactively438980
Node: Bash History Facilities439661
Node: Bash History Builtins442663
Node: History Interaction447684
Node: Event Designators451301
Node: Word Designators452652
Node: Modifiers454409
Node: Installing Bash456214
Node: Basic Installation457348
Node: Compilers and Options461067
Node: Compiling For Multiple Architectures461805
Node: Installation Names463494
Node: Specifying the System Type465600
Node: Sharing Defaults466314
Node: Operation Controls466984
Node: Optional Features467939
Node: Reporting Bugs479155
Node: Major Differences From The Bourne Shell480486
Node: GNU Free Documentation License497332
Node: Indexes522506
Node: Builtin Index522957
Node: Reserved Word Index529781
Node: Variable Index532226
Node: Function Index549211
Node: Concept Index562992

End Tag Table
+97 -97
View File
@@ -99,145 +99,145 @@
@xrdef{Shell Parameter Expansion-pg}{26}
@xrdef{Command Substitution-title}{Command Substitution}
@xrdef{Command Substitution-snt}{Section@tie 3.5.4}
@xrdef{Command Substitution-pg}{34}
@xrdef{Arithmetic Expansion-title}{Arithmetic Expansion}
@xrdef{Arithmetic Expansion-snt}{Section@tie 3.5.5}
@xrdef{Command Substitution-pg}{34}
@xrdef{Arithmetic Expansion-pg}{34}
@xrdef{Process Substitution-title}{Process Substitution}
@xrdef{Process Substitution-snt}{Section@tie 3.5.6}
@xrdef{Arithmetic Expansion-pg}{35}
@xrdef{Process Substitution-pg}{35}
@xrdef{Word Splitting-title}{Word Splitting}
@xrdef{Word Splitting-snt}{Section@tie 3.5.7}
@xrdef{Filename Expansion-title}{Filename Expansion}
@xrdef{Filename Expansion-snt}{Section@tie 3.5.8}
@xrdef{Process Substitution-pg}{35}
@xrdef{Word Splitting-pg}{35}
@xrdef{Word Splitting-pg}{36}
@xrdef{Filename Expansion-pg}{36}
@xrdef{Pattern Matching-title}{Pattern Matching}
@xrdef{Pattern Matching-snt}{Section@tie 3.5.8.1}
@xrdef{Filename Expansion-pg}{36}
@xrdef{Pattern Matching-pg}{36}
@xrdef{Pattern Matching-pg}{37}
@xrdef{Quote Removal-title}{Quote Removal}
@xrdef{Quote Removal-snt}{Section@tie 3.5.9}
@xrdef{Redirections-title}{Redirections}
@xrdef{Redirections-snt}{Section@tie 3.6}
@xrdef{Quote Removal-pg}{38}
@xrdef{Redirections-pg}{38}
@xrdef{Quote Removal-pg}{39}
@xrdef{Redirections-pg}{39}
@xrdef{Executing Commands-title}{Executing Commands}
@xrdef{Executing Commands-snt}{Section@tie 3.7}
@xrdef{Simple Command Expansion-title}{Simple Command Expansion}
@xrdef{Simple Command Expansion-snt}{Section@tie 3.7.1}
@xrdef{Command Search and Execution-title}{Command Search and Execution}
@xrdef{Command Search and Execution-snt}{Section@tie 3.7.2}
@xrdef{Executing Commands-pg}{42}
@xrdef{Simple Command Expansion-pg}{42}
@xrdef{Command Search and Execution-pg}{42}
@xrdef{Executing Commands-pg}{43}
@xrdef{Simple Command Expansion-pg}{43}
@xrdef{Command Search and Execution-pg}{43}
@xrdef{Command Execution Environment-title}{Command Execution Environment}
@xrdef{Command Execution Environment-snt}{Section@tie 3.7.3}
@xrdef{Command Execution Environment-pg}{43}
@xrdef{Command Execution Environment-pg}{44}
@xrdef{Environment-title}{Environment}
@xrdef{Environment-snt}{Section@tie 3.7.4}
@xrdef{Environment-pg}{44}
@xrdef{Exit Status-title}{Exit Status}
@xrdef{Exit Status-snt}{Section@tie 3.7.5}
@xrdef{Environment-pg}{45}
@xrdef{Exit Status-pg}{45}
@xrdef{Signals-title}{Signals}
@xrdef{Signals-snt}{Section@tie 3.7.6}
@xrdef{Exit Status-pg}{45}
@xrdef{Signals-pg}{45}
@xrdef{Signals-pg}{46}
@xrdef{Shell Scripts-title}{Shell Scripts}
@xrdef{Shell Scripts-snt}{Section@tie 3.8}
@xrdef{Shell Scripts-pg}{46}
@xrdef{Shell Scripts-pg}{47}
@xrdef{Shell Builtin Commands-title}{Shell Builtin Commands}
@xrdef{Shell Builtin Commands-snt}{Chapter@tie 4}
@xrdef{Bourne Shell Builtins-title}{Bourne Shell Builtins}
@xrdef{Bourne Shell Builtins-snt}{Section@tie 4.1}
@xrdef{Shell Builtin Commands-pg}{48}
@xrdef{Bourne Shell Builtins-pg}{48}
@xrdef{Shell Builtin Commands-pg}{49}
@xrdef{Bourne Shell Builtins-pg}{49}
@xrdef{Bash Builtins-title}{Bash Builtin Commands}
@xrdef{Bash Builtins-snt}{Section@tie 4.2}
@xrdef{Bash Builtins-pg}{56}
@xrdef{Bash Builtins-pg}{57}
@xrdef{Modifying Shell Behavior-title}{Modifying Shell Behavior}
@xrdef{Modifying Shell Behavior-snt}{Section@tie 4.3}
@xrdef{The Set Builtin-title}{The Set Builtin}
@xrdef{The Set Builtin-snt}{Section@tie 4.3.1}
@xrdef{Modifying Shell Behavior-pg}{67}
@xrdef{The Set Builtin-pg}{67}
@xrdef{Modifying Shell Behavior-pg}{68}
@xrdef{The Set Builtin-pg}{68}
@xrdef{The Shopt Builtin-title}{The Shopt Builtin}
@xrdef{The Shopt Builtin-snt}{Section@tie 4.3.2}
@xrdef{The Shopt Builtin-pg}{71}
@xrdef{The Shopt Builtin-pg}{72}
@xrdef{Special Builtins-title}{Special Builtins}
@xrdef{Special Builtins-snt}{Section@tie 4.4}
@xrdef{Special Builtins-pg}{78}
@xrdef{Special Builtins-pg}{79}
@xrdef{Shell Variables-title}{Shell Variables}
@xrdef{Shell Variables-snt}{Chapter@tie 5}
@xrdef{Bourne Shell Variables-title}{Bourne Shell Variables}
@xrdef{Bourne Shell Variables-snt}{Section@tie 5.1}
@xrdef{Bash Variables-title}{Bash Variables}
@xrdef{Bash Variables-snt}{Section@tie 5.2}
@xrdef{Shell Variables-pg}{79}
@xrdef{Bourne Shell Variables-pg}{79}
@xrdef{Bash Variables-pg}{79}
@xrdef{Shell Variables-pg}{80}
@xrdef{Bourne Shell Variables-pg}{80}
@xrdef{Bash Variables-pg}{80}
@xrdef{Bash Features-title}{Bash Features}
@xrdef{Bash Features-snt}{Chapter@tie 6}
@xrdef{Invoking Bash-title}{Invoking Bash}
@xrdef{Invoking Bash-snt}{Section@tie 6.1}
@xrdef{Bash Features-pg}{92}
@xrdef{Invoking Bash-pg}{92}
@xrdef{Bash Features-pg}{93}
@xrdef{Invoking Bash-pg}{93}
@xrdef{Bash Startup Files-title}{Bash Startup Files}
@xrdef{Bash Startup Files-snt}{Section@tie 6.2}
@xrdef{Bash Startup Files-pg}{94}
@xrdef{Bash Startup Files-pg}{95}
@xrdef{Interactive Shells-title}{Interactive Shells}
@xrdef{Interactive Shells-snt}{Section@tie 6.3}
@xrdef{What is an Interactive Shell?-title}{What is an Interactive Shell?}
@xrdef{What is an Interactive Shell?-snt}{Section@tie 6.3.1}
@xrdef{Interactive Shells-pg}{95}
@xrdef{Interactive Shells-pg}{96}
@xrdef{Is this Shell Interactive?-title}{Is this Shell Interactive?}
@xrdef{Is this Shell Interactive?-snt}{Section@tie 6.3.2}
@xrdef{Interactive Shell Behavior-title}{Interactive Shell Behavior}
@xrdef{Interactive Shell Behavior-snt}{Section@tie 6.3.3}
@xrdef{What is an Interactive Shell?-pg}{96}
@xrdef{Is this Shell Interactive?-pg}{96}
@xrdef{Interactive Shell Behavior-pg}{96}
@xrdef{What is an Interactive Shell?-pg}{97}
@xrdef{Is this Shell Interactive?-pg}{97}
@xrdef{Interactive Shell Behavior-pg}{97}
@xrdef{Bash Conditional Expressions-title}{Bash Conditional Expressions}
@xrdef{Bash Conditional Expressions-snt}{Section@tie 6.4}
@xrdef{Bash Conditional Expressions-pg}{97}
@xrdef{Bash Conditional Expressions-pg}{98}
@xrdef{Shell Arithmetic-title}{Shell Arithmetic}
@xrdef{Shell Arithmetic-snt}{Section@tie 6.5}
@xrdef{Shell Arithmetic-pg}{99}
@xrdef{Shell Arithmetic-pg}{100}
@xrdef{Aliases-title}{Aliases}
@xrdef{Aliases-snt}{Section@tie 6.6}
@xrdef{Arrays-title}{Arrays}
@xrdef{Arrays-snt}{Section@tie 6.7}
@xrdef{Aliases-pg}{101}
@xrdef{Arrays-pg}{101}
@xrdef{Aliases-pg}{102}
@xrdef{Arrays-pg}{102}
@xrdef{The Directory Stack-title}{The Directory Stack}
@xrdef{The Directory Stack-snt}{Section@tie 6.8}
@xrdef{The Directory Stack-pg}{103}
@xrdef{The Directory Stack-pg}{104}
@xrdef{Directory Stack Builtins-title}{Directory Stack Builtins}
@xrdef{Directory Stack Builtins-snt}{Section@tie 6.8.1}
@xrdef{Directory Stack Builtins-pg}{104}
@xrdef{Directory Stack Builtins-pg}{105}
@xrdef{Controlling the Prompt-title}{Controlling the Prompt}
@xrdef{Controlling the Prompt-snt}{Section@tie 6.9}
@xrdef{Controlling the Prompt-pg}{105}
@xrdef{Controlling the Prompt-pg}{106}
@xrdef{The Restricted Shell-title}{The Restricted Shell}
@xrdef{The Restricted Shell-snt}{Section@tie 6.10}
@xrdef{Bash POSIX Mode-title}{Bash and POSIX}
@xrdef{Bash POSIX Mode-snt}{Section@tie 6.11}
@xrdef{The Restricted Shell-pg}{107}
@xrdef{Bash POSIX Mode-pg}{107}
@xrdef{The Restricted Shell-pg}{108}
@xrdef{Bash POSIX Mode-pg}{108}
@xrdef{Shell Compatibility Mode-title}{Shell Compatibility Mode}
@xrdef{Shell Compatibility Mode-snt}{Section@tie 6.12}
@xrdef{Shell Compatibility Mode-pg}{112}
@xrdef{Shell Compatibility Mode-pg}{113}
@xrdef{Job Control-title}{Job Control}
@xrdef{Job Control-snt}{Chapter@tie 7}
@xrdef{Job Control Basics-title}{Job Control Basics}
@xrdef{Job Control Basics-snt}{Section@tie 7.1}
@xrdef{Job Control-pg}{116}
@xrdef{Job Control Basics-pg}{116}
@xrdef{Job Control-pg}{117}
@xrdef{Job Control Basics-pg}{117}
@xrdef{Job Control Builtins-title}{Job Control Builtins}
@xrdef{Job Control Builtins-snt}{Section@tie 7.2}
@xrdef{Job Control Builtins-pg}{117}
@xrdef{Job Control Builtins-pg}{118}
@xrdef{Job Control Variables-title}{Job Control Variables}
@xrdef{Job Control Variables-snt}{Section@tie 7.3}
@xrdef{Job Control Variables-pg}{119}
@xrdef{Job Control Variables-pg}{120}
@xrdef{Command Line Editing-title}{Command Line Editing}
@xrdef{Command Line Editing-snt}{Chapter@tie 8}
@xrdef{Introduction and Notation-title}{Introduction to Line Editing}
@@ -246,145 +246,145 @@
@xrdef{Readline Interaction-snt}{Section@tie 8.2}
@xrdef{Readline Bare Essentials-title}{Readline Bare Essentials}
@xrdef{Readline Bare Essentials-snt}{Section@tie 8.2.1}
@xrdef{Command Line Editing-pg}{120}
@xrdef{Introduction and Notation-pg}{120}
@xrdef{Readline Interaction-pg}{120}
@xrdef{Command Line Editing-pg}{121}
@xrdef{Introduction and Notation-pg}{121}
@xrdef{Readline Interaction-pg}{121}
@xrdef{Readline Movement Commands-title}{Readline Movement Commands}
@xrdef{Readline Movement Commands-snt}{Section@tie 8.2.2}
@xrdef{Readline Killing Commands-title}{Readline Killing Commands}
@xrdef{Readline Killing Commands-snt}{Section@tie 8.2.3}
@xrdef{Readline Bare Essentials-pg}{121}
@xrdef{Readline Movement Commands-pg}{121}
@xrdef{Readline Bare Essentials-pg}{122}
@xrdef{Readline Movement Commands-pg}{122}
@xrdef{Readline Arguments-title}{Readline Arguments}
@xrdef{Readline Arguments-snt}{Section@tie 8.2.4}
@xrdef{Searching-title}{Searching for Commands in the History}
@xrdef{Searching-snt}{Section@tie 8.2.5}
@xrdef{Readline Killing Commands-pg}{122}
@xrdef{Readline Arguments-pg}{122}
@xrdef{Searching-pg}{122}
@xrdef{Readline Killing Commands-pg}{123}
@xrdef{Readline Arguments-pg}{123}
@xrdef{Searching-pg}{123}
@xrdef{Readline Init File-title}{Readline Init File}
@xrdef{Readline Init File-snt}{Section@tie 8.3}
@xrdef{Readline Init File Syntax-title}{Readline Init File Syntax}
@xrdef{Readline Init File Syntax-snt}{Section@tie 8.3.1}
@xrdef{Readline Init File-pg}{123}
@xrdef{Readline Init File Syntax-pg}{123}
@xrdef{Readline Init File-pg}{124}
@xrdef{Readline Init File Syntax-pg}{124}
@xrdef{Conditional Init Constructs-title}{Conditional Init Constructs}
@xrdef{Conditional Init Constructs-snt}{Section@tie 8.3.2}
@xrdef{Conditional Init Constructs-pg}{132}
@xrdef{Conditional Init Constructs-pg}{133}
@xrdef{Sample Init File-title}{Sample Init File}
@xrdef{Sample Init File-snt}{Section@tie 8.3.3}
@xrdef{Sample Init File-pg}{133}
@xrdef{Sample Init File-pg}{134}
@xrdef{Bindable Readline Commands-title}{Bindable Readline Commands}
@xrdef{Bindable Readline Commands-snt}{Section@tie 8.4}
@xrdef{Commands For Moving-title}{Commands For Moving}
@xrdef{Commands For Moving-snt}{Section@tie 8.4.1}
@xrdef{Bindable Readline Commands-pg}{136}
@xrdef{Commands For Moving-pg}{136}
@xrdef{Bindable Readline Commands-pg}{137}
@xrdef{Commands For Moving-pg}{137}
@xrdef{Commands For History-title}{Commands For Manipulating The History}
@xrdef{Commands For History-snt}{Section@tie 8.4.2}
@xrdef{Commands For History-pg}{137}
@xrdef{Commands For History-pg}{138}
@xrdef{Commands For Text-title}{Commands For Changing Text}
@xrdef{Commands For Text-snt}{Section@tie 8.4.3}
@xrdef{Commands For Text-pg}{139}
@xrdef{Commands For Text-pg}{140}
@xrdef{Commands For Killing-title}{Killing And Yanking}
@xrdef{Commands For Killing-snt}{Section@tie 8.4.4}
@xrdef{Commands For Killing-pg}{140}
@xrdef{Commands For Killing-pg}{141}
@xrdef{Numeric Arguments-title}{Specifying Numeric Arguments}
@xrdef{Numeric Arguments-snt}{Section@tie 8.4.5}
@xrdef{Numeric Arguments-pg}{141}
@xrdef{Numeric Arguments-pg}{142}
@xrdef{Commands For Completion-title}{Letting Readline Type For You}
@xrdef{Commands For Completion-snt}{Section@tie 8.4.6}
@xrdef{Commands For Completion-pg}{142}
@xrdef{Commands For Completion-pg}{143}
@xrdef{Keyboard Macros-title}{Keyboard Macros}
@xrdef{Keyboard Macros-snt}{Section@tie 8.4.7}
@xrdef{Keyboard Macros-pg}{143}
@xrdef{Keyboard Macros-pg}{144}
@xrdef{Miscellaneous Commands-title}{Some Miscellaneous Commands}
@xrdef{Miscellaneous Commands-snt}{Section@tie 8.4.8}
@xrdef{Miscellaneous Commands-pg}{144}
@xrdef{Miscellaneous Commands-pg}{145}
@xrdef{Readline vi Mode-title}{Readline vi Mode}
@xrdef{Readline vi Mode-snt}{Section@tie 8.5}
@xrdef{Programmable Completion-title}{Programmable Completion}
@xrdef{Programmable Completion-snt}{Section@tie 8.6}
@xrdef{Readline vi Mode-pg}{146}
@xrdef{Programmable Completion-pg}{146}
@xrdef{Readline vi Mode-pg}{147}
@xrdef{Programmable Completion-pg}{147}
@xrdef{Programmable Completion Builtins-title}{Programmable Completion Builtins}
@xrdef{Programmable Completion Builtins-snt}{Section@tie 8.7}
@xrdef{Programmable Completion Builtins-pg}{149}
@xrdef{Programmable Completion Builtins-pg}{150}
@xrdef{A Programmable Completion Example-title}{A Programmable Completion Example}
@xrdef{A Programmable Completion Example-snt}{Section@tie 8.8}
@xrdef{A Programmable Completion Example-pg}{153}
@xrdef{A Programmable Completion Example-pg}{154}
@xrdef{Using History Interactively-title}{Using History Interactively}
@xrdef{Using History Interactively-snt}{Chapter@tie 9}
@xrdef{Bash History Facilities-title}{Bash History Facilities}
@xrdef{Bash History Facilities-snt}{Section@tie 9.1}
@xrdef{Bash History Builtins-title}{Bash History Builtins}
@xrdef{Bash History Builtins-snt}{Section@tie 9.2}
@xrdef{Using History Interactively-pg}{155}
@xrdef{Bash History Facilities-pg}{155}
@xrdef{Bash History Builtins-pg}{155}
@xrdef{Using History Interactively-pg}{156}
@xrdef{Bash History Facilities-pg}{156}
@xrdef{Bash History Builtins-pg}{156}
@xrdef{History Interaction-title}{History Expansion}
@xrdef{History Interaction-snt}{Section@tie 9.3}
@xrdef{History Interaction-pg}{157}
@xrdef{History Interaction-pg}{158}
@xrdef{Event Designators-title}{Event Designators}
@xrdef{Event Designators-snt}{Section@tie 9.3.1}
@xrdef{Event Designators-pg}{158}
@xrdef{Event Designators-pg}{159}
@xrdef{Word Designators-title}{Word Designators}
@xrdef{Word Designators-snt}{Section@tie 9.3.2}
@xrdef{Modifiers-title}{Modifiers}
@xrdef{Modifiers-snt}{Section@tie 9.3.3}
@xrdef{Word Designators-pg}{159}
@xrdef{Modifiers-pg}{159}
@xrdef{Word Designators-pg}{160}
@xrdef{Modifiers-pg}{160}
@xrdef{Installing Bash-title}{Installing Bash}
@xrdef{Installing Bash-snt}{Chapter@tie 10}
@xrdef{Basic Installation-title}{Basic Installation}
@xrdef{Basic Installation-snt}{Section@tie 10.1}
@xrdef{Installing Bash-pg}{161}
@xrdef{Basic Installation-pg}{161}
@xrdef{Installing Bash-pg}{162}
@xrdef{Basic Installation-pg}{162}
@xrdef{Compilers and Options-title}{Compilers and Options}
@xrdef{Compilers and Options-snt}{Section@tie 10.2}
@xrdef{Compiling For Multiple Architectures-title}{Compiling For Multiple Architectures}
@xrdef{Compiling For Multiple Architectures-snt}{Section@tie 10.3}
@xrdef{Installation Names-title}{Installation Names}
@xrdef{Installation Names-snt}{Section@tie 10.4}
@xrdef{Compilers and Options-pg}{162}
@xrdef{Compiling For Multiple Architectures-pg}{162}
@xrdef{Compilers and Options-pg}{163}
@xrdef{Compiling For Multiple Architectures-pg}{163}
@xrdef{Specifying the System Type-title}{Specifying the System Type}
@xrdef{Specifying the System Type-snt}{Section@tie 10.5}
@xrdef{Sharing Defaults-title}{Sharing Defaults}
@xrdef{Sharing Defaults-snt}{Section@tie 10.6}
@xrdef{Operation Controls-title}{Operation Controls}
@xrdef{Operation Controls-snt}{Section@tie 10.7}
@xrdef{Installation Names-pg}{163}
@xrdef{Specifying the System Type-pg}{163}
@xrdef{Sharing Defaults-pg}{163}
@xrdef{Installation Names-pg}{164}
@xrdef{Specifying the System Type-pg}{164}
@xrdef{Sharing Defaults-pg}{164}
@xrdef{Optional Features-title}{Optional Features}
@xrdef{Optional Features-snt}{Section@tie 10.8}
@xrdef{Operation Controls-pg}{164}
@xrdef{Optional Features-pg}{164}
@xrdef{Operation Controls-pg}{165}
@xrdef{Optional Features-pg}{165}
@xrdef{Reporting Bugs-title}{Reporting Bugs}
@xrdef{Reporting Bugs-snt}{Appendix@tie @char65{}}
@xrdef{Reporting Bugs-pg}{170}
@xrdef{Reporting Bugs-pg}{171}
@xrdef{Major Differences From The Bourne Shell-title}{Major Differences From The Bourne Shell}
@xrdef{Major Differences From The Bourne Shell-snt}{Appendix@tie @char66{}}
@xrdef{Major Differences From The Bourne Shell-pg}{171}
@xrdef{Major Differences From The Bourne Shell-pg}{172}
@xrdef{GNU Free Documentation License-title}{GNU Free Documentation License}
@xrdef{GNU Free Documentation License-snt}{Appendix@tie @char67{}}
@xrdef{GNU Free Documentation License-pg}{177}
@xrdef{GNU Free Documentation License-pg}{178}
@xrdef{Indexes-title}{Indexes}
@xrdef{Indexes-snt}{Appendix@tie @char68{}}
@xrdef{Builtin Index-title}{Index of Shell Builtin Commands}
@xrdef{Builtin Index-snt}{Section@tie @char68.1}
@xrdef{Indexes-pg}{185}
@xrdef{Builtin Index-pg}{185}
@xrdef{Indexes-pg}{186}
@xrdef{Builtin Index-pg}{186}
@xrdef{Reserved Word Index-title}{Index of Shell Reserved Words}
@xrdef{Reserved Word Index-snt}{Section@tie @char68.2}
@xrdef{Variable Index-title}{Parameter and Variable Index}
@xrdef{Variable Index-snt}{Section@tie @char68.3}
@xrdef{Reserved Word Index-pg}{186}
@xrdef{Variable Index-pg}{187}
@xrdef{Reserved Word Index-pg}{187}
@xrdef{Variable Index-pg}{188}
@xrdef{Function Index-title}{Function Index}
@xrdef{Function Index-snt}{Section@tie @char68.4}
@xrdef{Function Index-pg}{189}
@xrdef{Function Index-pg}{190}
@xrdef{Concept Index-title}{Concept Index}
@xrdef{Concept Index-snt}{Section@tie @char68.5}
@xrdef{Concept Index-pg}{191}
@xrdef{Concept Index-pg}{192}
+59 -59
View File
@@ -1,59 +1,59 @@
\entry{:}{48}{\code {:}}
\entry{.}{48}{\code {.}}
\entry{break}{49}{\code {break}}
\entry{cd}{49}{\code {cd}}
\entry{continue}{49}{\code {continue}}
\entry{eval}{49}{\code {eval}}
\entry{exec}{50}{\code {exec}}
\entry{exit}{50}{\code {exit}}
\entry{export}{50}{\code {export}}
\entry{getopts}{50}{\code {getopts}}
\entry{hash}{51}{\code {hash}}
\entry{pwd}{51}{\code {pwd}}
\entry{readonly}{52}{\code {readonly}}
\entry{return}{52}{\code {return}}
\entry{shift}{52}{\code {shift}}
\entry{test}{52}{\code {test}}
\entry{[}{52}{\code {[}}
\entry{times}{54}{\code {times}}
\entry{trap}{54}{\code {trap}}
\entry{umask}{55}{\code {umask}}
\entry{unset}{55}{\code {unset}}
\entry{alias}{56}{\code {alias}}
\entry{bind}{56}{\code {bind}}
\entry{builtin}{57}{\code {builtin}}
\entry{caller}{57}{\code {caller}}
\entry{command}{57}{\code {command}}
\entry{declare}{58}{\code {declare}}
\entry{echo}{59}{\code {echo}}
\entry{enable}{60}{\code {enable}}
\entry{help}{61}{\code {help}}
\entry{let}{61}{\code {let}}
\entry{local}{61}{\code {local}}
\entry{logout}{61}{\code {logout}}
\entry{mapfile}{62}{\code {mapfile}}
\entry{printf}{62}{\code {printf}}
\entry{read}{63}{\code {read}}
\entry{readarray}{65}{\code {readarray}}
\entry{source}{65}{\code {source}}
\entry{type}{65}{\code {type}}
\entry{typeset}{66}{\code {typeset}}
\entry{ulimit}{66}{\code {ulimit}}
\entry{unalias}{67}{\code {unalias}}
\entry{set}{67}{\code {set}}
\entry{shopt}{71}{\code {shopt}}
\entry{dirs}{104}{\code {dirs}}
\entry{popd}{104}{\code {popd}}
\entry{pushd}{104}{\code {pushd}}
\entry{bg}{117}{\code {bg}}
\entry{fg}{117}{\code {fg}}
\entry{jobs}{117}{\code {jobs}}
\entry{kill}{118}{\code {kill}}
\entry{wait}{118}{\code {wait}}
\entry{disown}{119}{\code {disown}}
\entry{suspend}{119}{\code {suspend}}
\entry{compgen}{149}{\code {compgen}}
\entry{complete}{149}{\code {complete}}
\entry{compopt}{152}{\code {compopt}}
\entry{fc}{156}{\code {fc}}
\entry{history}{156}{\code {history}}
\entry{:}{49}{\code {:}}
\entry{.}{49}{\code {.}}
\entry{break}{50}{\code {break}}
\entry{cd}{50}{\code {cd}}
\entry{continue}{50}{\code {continue}}
\entry{eval}{50}{\code {eval}}
\entry{exec}{51}{\code {exec}}
\entry{exit}{51}{\code {exit}}
\entry{export}{51}{\code {export}}
\entry{getopts}{51}{\code {getopts}}
\entry{hash}{52}{\code {hash}}
\entry{pwd}{52}{\code {pwd}}
\entry{readonly}{53}{\code {readonly}}
\entry{return}{53}{\code {return}}
\entry{shift}{53}{\code {shift}}
\entry{test}{53}{\code {test}}
\entry{[}{53}{\code {[}}
\entry{times}{55}{\code {times}}
\entry{trap}{55}{\code {trap}}
\entry{umask}{56}{\code {umask}}
\entry{unset}{56}{\code {unset}}
\entry{alias}{57}{\code {alias}}
\entry{bind}{57}{\code {bind}}
\entry{builtin}{58}{\code {builtin}}
\entry{caller}{58}{\code {caller}}
\entry{command}{58}{\code {command}}
\entry{declare}{59}{\code {declare}}
\entry{echo}{60}{\code {echo}}
\entry{enable}{61}{\code {enable}}
\entry{help}{62}{\code {help}}
\entry{let}{62}{\code {let}}
\entry{local}{62}{\code {local}}
\entry{logout}{62}{\code {logout}}
\entry{mapfile}{63}{\code {mapfile}}
\entry{printf}{63}{\code {printf}}
\entry{read}{64}{\code {read}}
\entry{readarray}{66}{\code {readarray}}
\entry{source}{66}{\code {source}}
\entry{type}{66}{\code {type}}
\entry{typeset}{67}{\code {typeset}}
\entry{ulimit}{67}{\code {ulimit}}
\entry{unalias}{68}{\code {unalias}}
\entry{set}{68}{\code {set}}
\entry{shopt}{72}{\code {shopt}}
\entry{dirs}{105}{\code {dirs}}
\entry{popd}{105}{\code {popd}}
\entry{pushd}{105}{\code {pushd}}
\entry{bg}{118}{\code {bg}}
\entry{fg}{118}{\code {fg}}
\entry{jobs}{118}{\code {jobs}}
\entry{kill}{119}{\code {kill}}
\entry{wait}{119}{\code {wait}}
\entry{disown}{120}{\code {disown}}
\entry{suspend}{120}{\code {suspend}}
\entry{compgen}{150}{\code {compgen}}
\entry{complete}{150}{\code {complete}}
\entry{compopt}{153}{\code {compopt}}
\entry{fc}{157}{\code {fc}}
\entry{history}{157}{\code {history}}
+59 -59
View File
@@ -1,80 +1,80 @@
\initial {.}
\entry{\code {.}}{48}
\entry{\code {.}}{49}
\initial {:}
\entry{\code {:}}{48}
\entry{\code {:}}{49}
\initial {[}
\entry{\code {[}}{52}
\entry{\code {[}}{53}
\initial {A}
\entry{\code {alias}}{56}
\entry{\code {alias}}{57}
\initial {B}
\entry{\code {bg}}{117}
\entry{\code {bind}}{56}
\entry{\code {break}}{49}
\entry{\code {builtin}}{57}
\entry{\code {bg}}{118}
\entry{\code {bind}}{57}
\entry{\code {break}}{50}
\entry{\code {builtin}}{58}
\initial {C}
\entry{\code {caller}}{57}
\entry{\code {cd}}{49}
\entry{\code {command}}{57}
\entry{\code {compgen}}{149}
\entry{\code {complete}}{149}
\entry{\code {compopt}}{152}
\entry{\code {continue}}{49}
\entry{\code {caller}}{58}
\entry{\code {cd}}{50}
\entry{\code {command}}{58}
\entry{\code {compgen}}{150}
\entry{\code {complete}}{150}
\entry{\code {compopt}}{153}
\entry{\code {continue}}{50}
\initial {D}
\entry{\code {declare}}{58}
\entry{\code {dirs}}{104}
\entry{\code {disown}}{119}
\entry{\code {declare}}{59}
\entry{\code {dirs}}{105}
\entry{\code {disown}}{120}
\initial {E}
\entry{\code {echo}}{59}
\entry{\code {enable}}{60}
\entry{\code {eval}}{49}
\entry{\code {exec}}{50}
\entry{\code {exit}}{50}
\entry{\code {export}}{50}
\entry{\code {echo}}{60}
\entry{\code {enable}}{61}
\entry{\code {eval}}{50}
\entry{\code {exec}}{51}
\entry{\code {exit}}{51}
\entry{\code {export}}{51}
\initial {F}
\entry{\code {fc}}{156}
\entry{\code {fg}}{117}
\entry{\code {fc}}{157}
\entry{\code {fg}}{118}
\initial {G}
\entry{\code {getopts}}{50}
\entry{\code {getopts}}{51}
\initial {H}
\entry{\code {hash}}{51}
\entry{\code {help}}{61}
\entry{\code {history}}{156}
\entry{\code {hash}}{52}
\entry{\code {help}}{62}
\entry{\code {history}}{157}
\initial {J}
\entry{\code {jobs}}{117}
\entry{\code {jobs}}{118}
\initial {K}
\entry{\code {kill}}{118}
\entry{\code {kill}}{119}
\initial {L}
\entry{\code {let}}{61}
\entry{\code {local}}{61}
\entry{\code {logout}}{61}
\entry{\code {let}}{62}
\entry{\code {local}}{62}
\entry{\code {logout}}{62}
\initial {M}
\entry{\code {mapfile}}{62}
\entry{\code {mapfile}}{63}
\initial {P}
\entry{\code {popd}}{104}
\entry{\code {printf}}{62}
\entry{\code {pushd}}{104}
\entry{\code {pwd}}{51}
\entry{\code {popd}}{105}
\entry{\code {printf}}{63}
\entry{\code {pushd}}{105}
\entry{\code {pwd}}{52}
\initial {R}
\entry{\code {read}}{63}
\entry{\code {readarray}}{65}
\entry{\code {readonly}}{52}
\entry{\code {return}}{52}
\entry{\code {read}}{64}
\entry{\code {readarray}}{66}
\entry{\code {readonly}}{53}
\entry{\code {return}}{53}
\initial {S}
\entry{\code {set}}{67}
\entry{\code {shift}}{52}
\entry{\code {shopt}}{71}
\entry{\code {source}}{65}
\entry{\code {suspend}}{119}
\entry{\code {set}}{68}
\entry{\code {shift}}{53}
\entry{\code {shopt}}{72}
\entry{\code {source}}{66}
\entry{\code {suspend}}{120}
\initial {T}
\entry{\code {test}}{52}
\entry{\code {times}}{54}
\entry{\code {trap}}{54}
\entry{\code {type}}{65}
\entry{\code {typeset}}{66}
\entry{\code {test}}{53}
\entry{\code {times}}{55}
\entry{\code {trap}}{55}
\entry{\code {type}}{66}
\entry{\code {typeset}}{67}
\initial {U}
\entry{\code {ulimit}}{66}
\entry{\code {umask}}{55}
\entry{\code {unalias}}{67}
\entry{\code {unset}}{55}
\entry{\code {ulimit}}{67}
\entry{\code {umask}}{56}
\entry{\code {unalias}}{68}
\entry{\code {unset}}{56}
\initial {W}
\entry{\code {wait}}{118}
\entry{\code {wait}}{119}
+65 -65
View File
@@ -55,75 +55,75 @@
\entry{parameter expansion}{26}{parameter expansion}
\entry{expansion, parameter}{26}{expansion, parameter}
\entry{command substitution}{34}{command substitution}
\entry{expansion, arithmetic}{34}{expansion, arithmetic}
\entry{arithmetic expansion}{34}{arithmetic expansion}
\entry{expansion, arithmetic}{35}{expansion, arithmetic}
\entry{arithmetic expansion}{35}{arithmetic expansion}
\entry{process substitution}{35}{process substitution}
\entry{word splitting}{35}{word splitting}
\entry{word splitting}{36}{word splitting}
\entry{expansion, filename}{36}{expansion, filename}
\entry{expansion, pathname}{36}{expansion, pathname}
\entry{filename expansion}{36}{filename expansion}
\entry{pathname expansion}{36}{pathname expansion}
\entry{pattern matching}{36}{pattern matching}
\entry{matching, pattern}{36}{matching, pattern}
\entry{redirection}{38}{redirection}
\entry{command expansion}{42}{command expansion}
\entry{command execution}{42}{command execution}
\entry{command search}{42}{command search}
\entry{execution environment}{43}{execution environment}
\entry{environment}{44}{environment}
\entry{pattern matching}{37}{pattern matching}
\entry{matching, pattern}{37}{matching, pattern}
\entry{redirection}{39}{redirection}
\entry{command expansion}{43}{command expansion}
\entry{command execution}{43}{command execution}
\entry{command search}{43}{command search}
\entry{execution environment}{44}{execution environment}
\entry{environment}{45}{environment}
\entry{exit status}{45}{exit status}
\entry{signal handling}{45}{signal handling}
\entry{shell script}{46}{shell script}
\entry{special builtin}{78}{special builtin}
\entry{login shell}{94}{login shell}
\entry{interactive shell}{94}{interactive shell}
\entry{startup files}{94}{startup files}
\entry{signal handling}{46}{signal handling}
\entry{shell script}{47}{shell script}
\entry{special builtin}{79}{special builtin}
\entry{login shell}{95}{login shell}
\entry{interactive shell}{95}{interactive shell}
\entry{shell, interactive}{95}{shell, interactive}
\entry{expressions, conditional}{97}{expressions, conditional}
\entry{arithmetic, shell}{99}{arithmetic, shell}
\entry{shell arithmetic}{99}{shell arithmetic}
\entry{expressions, arithmetic}{99}{expressions, arithmetic}
\entry{evaluation, arithmetic}{99}{evaluation, arithmetic}
\entry{arithmetic evaluation}{99}{arithmetic evaluation}
\entry{arithmetic operators}{99}{arithmetic operators}
\entry{unary arithmetic operators}{99}{unary arithmetic operators}
\entry{binary arithmetic operators}{99}{binary arithmetic operators}
\entry{conditional arithmetic operator}{99}{conditional arithmetic operator}
\entry{bitwise arithmetic operators}{99}{bitwise arithmetic operators}
\entry{alias expansion}{101}{alias expansion}
\entry{arrays}{101}{arrays}
\entry{directory stack}{103}{directory stack}
\entry{prompting}{105}{prompting}
\entry{restricted shell}{107}{restricted shell}
\entry{POSIX description}{107}{POSIX description}
\entry{POSIX Mode}{108}{POSIX Mode}
\entry{Compatibility Level}{112}{Compatibility Level}
\entry{Compatibility Mode}{112}{Compatibility Mode}
\entry{job control}{116}{job control}
\entry{foreground}{116}{foreground}
\entry{background}{116}{background}
\entry{suspending jobs}{116}{suspending jobs}
\entry{Readline, how to use}{119}{Readline, how to use}
\entry{interaction, readline}{120}{interaction, readline}
\entry{notation, readline}{121}{notation, readline}
\entry{command editing}{121}{command editing}
\entry{editing command lines}{121}{editing command lines}
\entry{killing text}{122}{killing text}
\entry{yanking text}{122}{yanking text}
\entry{kill ring}{122}{kill ring}
\entry{initialization file, readline}{123}{initialization file, readline}
\entry{variables, readline}{124}{variables, readline}
\entry{programmable completion}{146}{programmable completion}
\entry{completion builtins}{149}{completion builtins}
\entry{History, how to use}{154}{History, how to use}
\entry{command history}{155}{command history}
\entry{history list}{155}{history list}
\entry{history builtins}{155}{history builtins}
\entry{history expansion}{157}{history expansion}
\entry{event designators}{158}{event designators}
\entry{history events}{158}{history events}
\entry{installation}{161}{installation}
\entry{configuration}{161}{configuration}
\entry{Bash installation}{161}{Bash installation}
\entry{Bash configuration}{161}{Bash configuration}
\entry{startup files}{95}{startup files}
\entry{interactive shell}{96}{interactive shell}
\entry{shell, interactive}{96}{shell, interactive}
\entry{expressions, conditional}{98}{expressions, conditional}
\entry{arithmetic, shell}{100}{arithmetic, shell}
\entry{shell arithmetic}{100}{shell arithmetic}
\entry{expressions, arithmetic}{100}{expressions, arithmetic}
\entry{evaluation, arithmetic}{100}{evaluation, arithmetic}
\entry{arithmetic evaluation}{100}{arithmetic evaluation}
\entry{arithmetic operators}{100}{arithmetic operators}
\entry{unary arithmetic operators}{100}{unary arithmetic operators}
\entry{binary arithmetic operators}{100}{binary arithmetic operators}
\entry{conditional arithmetic operator}{100}{conditional arithmetic operator}
\entry{bitwise arithmetic operators}{100}{bitwise arithmetic operators}
\entry{alias expansion}{102}{alias expansion}
\entry{arrays}{102}{arrays}
\entry{directory stack}{104}{directory stack}
\entry{prompting}{106}{prompting}
\entry{restricted shell}{108}{restricted shell}
\entry{POSIX description}{108}{POSIX description}
\entry{POSIX Mode}{109}{POSIX Mode}
\entry{Compatibility Level}{113}{Compatibility Level}
\entry{Compatibility Mode}{113}{Compatibility Mode}
\entry{job control}{117}{job control}
\entry{foreground}{117}{foreground}
\entry{background}{117}{background}
\entry{suspending jobs}{117}{suspending jobs}
\entry{Readline, how to use}{120}{Readline, how to use}
\entry{interaction, readline}{121}{interaction, readline}
\entry{notation, readline}{122}{notation, readline}
\entry{command editing}{122}{command editing}
\entry{editing command lines}{122}{editing command lines}
\entry{killing text}{123}{killing text}
\entry{yanking text}{123}{yanking text}
\entry{kill ring}{123}{kill ring}
\entry{initialization file, readline}{124}{initialization file, readline}
\entry{variables, readline}{125}{variables, readline}
\entry{programmable completion}{147}{programmable completion}
\entry{completion builtins}{150}{completion builtins}
\entry{History, how to use}{155}{History, how to use}
\entry{command history}{156}{command history}
\entry{history list}{156}{history list}
\entry{history builtins}{156}{history builtins}
\entry{history expansion}{158}{history expansion}
\entry{event designators}{159}{event designators}
\entry{history events}{159}{history events}
\entry{installation}{162}{installation}
\entry{configuration}{162}{configuration}
\entry{Bash installation}{162}{Bash installation}
\entry{Bash configuration}{162}{Bash configuration}
+65 -65
View File
@@ -1,25 +1,25 @@
\initial {A}
\entry{alias expansion}{101}
\entry{arithmetic evaluation}{99}
\entry{arithmetic expansion}{34}
\entry{arithmetic operators}{99}
\entry{arithmetic, shell}{99}
\entry{arrays}{101}
\entry{alias expansion}{102}
\entry{arithmetic evaluation}{100}
\entry{arithmetic expansion}{35}
\entry{arithmetic operators}{100}
\entry{arithmetic, shell}{100}
\entry{arrays}{102}
\initial {B}
\entry{background}{116}
\entry{Bash configuration}{161}
\entry{Bash installation}{161}
\entry{binary arithmetic operators}{99}
\entry{bitwise arithmetic operators}{99}
\entry{background}{117}
\entry{Bash configuration}{162}
\entry{Bash installation}{162}
\entry{binary arithmetic operators}{100}
\entry{bitwise arithmetic operators}{100}
\entry{Bourne shell}{5}
\entry{brace expansion}{24}
\entry{builtin}{3}
\initial {C}
\entry{command editing}{121}
\entry{command execution}{42}
\entry{command expansion}{42}
\entry{command history}{155}
\entry{command search}{42}
\entry{command editing}{122}
\entry{command execution}{43}
\entry{command expansion}{43}
\entry{command history}{156}
\entry{command search}{43}
\entry{command substitution}{34}
\entry{command timing}{10}
\entry{commands, compound}{11}
@@ -31,67 +31,67 @@
\entry{commands, shell}{9}
\entry{commands, simple}{9}
\entry{comments, shell}{9}
\entry{Compatibility Level}{112}
\entry{Compatibility Mode}{112}
\entry{completion builtins}{149}
\entry{conditional arithmetic operator}{99}
\entry{configuration}{161}
\entry{Compatibility Level}{113}
\entry{Compatibility Mode}{113}
\entry{completion builtins}{150}
\entry{conditional arithmetic operator}{100}
\entry{configuration}{162}
\entry{control operator}{3}
\entry{coprocess}{18}
\initial {D}
\entry{directory stack}{103}
\entry{directory stack}{104}
\initial {E}
\entry{editing command lines}{121}
\entry{environment}{44}
\entry{evaluation, arithmetic}{99}
\entry{event designators}{158}
\entry{execution environment}{43}
\entry{editing command lines}{122}
\entry{environment}{45}
\entry{evaluation, arithmetic}{100}
\entry{event designators}{159}
\entry{execution environment}{44}
\entry{exit status}{3, 45}
\entry{expansion}{24}
\entry{expansion, arithmetic}{34}
\entry{expansion, arithmetic}{35}
\entry{expansion, brace}{24}
\entry{expansion, filename}{36}
\entry{expansion, parameter}{26}
\entry{expansion, pathname}{36}
\entry{expansion, tilde}{25}
\entry{expressions, arithmetic}{99}
\entry{expressions, conditional}{97}
\entry{expressions, arithmetic}{100}
\entry{expressions, conditional}{98}
\initial {F}
\entry{field}{3}
\entry{filename}{3}
\entry{filename expansion}{36}
\entry{foreground}{116}
\entry{foreground}{117}
\entry{functions, shell}{19}
\initial {H}
\entry{history builtins}{155}
\entry{history events}{158}
\entry{history expansion}{157}
\entry{history list}{155}
\entry{History, how to use}{154}
\entry{history builtins}{156}
\entry{history events}{159}
\entry{history expansion}{158}
\entry{history list}{156}
\entry{History, how to use}{155}
\initial {I}
\entry{identifier}{3}
\entry{initialization file, readline}{123}
\entry{installation}{161}
\entry{interaction, readline}{120}
\entry{interactive shell}{94, 95}
\entry{initialization file, readline}{124}
\entry{installation}{162}
\entry{interaction, readline}{121}
\entry{interactive shell}{95, 96}
\entry{internationalization}{7}
\entry{internationalized scripts}{7}
\initial {J}
\entry{job}{3}
\entry{job control}{3, 116}
\entry{job control}{3, 117}
\initial {K}
\entry{kill ring}{122}
\entry{killing text}{122}
\entry{kill ring}{123}
\entry{killing text}{123}
\initial {L}
\entry{localization}{7}
\entry{login shell}{94}
\entry{login shell}{95}
\initial {M}
\entry{matching, pattern}{36}
\entry{matching, pattern}{37}
\entry{metacharacter}{3}
\initial {N}
\entry{name}{3}
\entry{native languages}{7}
\entry{notation, readline}{121}
\entry{notation, readline}{122}
\initial {O}
\entry{operator, shell}{3}
\initial {P}
@@ -100,49 +100,49 @@
\entry{parameters, positional}{23}
\entry{parameters, special}{23}
\entry{pathname expansion}{36}
\entry{pattern matching}{36}
\entry{pattern matching}{37}
\entry{pipeline}{10}
\entry{POSIX}{3}
\entry{POSIX description}{107}
\entry{POSIX Mode}{108}
\entry{POSIX description}{108}
\entry{POSIX Mode}{109}
\entry{process group}{3}
\entry{process group ID}{3}
\entry{process substitution}{35}
\entry{programmable completion}{146}
\entry{prompting}{105}
\entry{programmable completion}{147}
\entry{prompting}{106}
\initial {Q}
\entry{quoting}{6}
\entry{quoting, ANSI}{6}
\initial {R}
\entry{Readline, how to use}{119}
\entry{redirection}{38}
\entry{Readline, how to use}{120}
\entry{redirection}{39}
\entry{reserved word}{3}
\entry{reserved words}{9}
\entry{restricted shell}{107}
\entry{restricted shell}{108}
\entry{return status}{4}
\initial {S}
\entry{shell arithmetic}{99}
\entry{shell arithmetic}{100}
\entry{shell function}{19}
\entry{shell script}{46}
\entry{shell script}{47}
\entry{shell variable}{21}
\entry{shell, interactive}{95}
\entry{shell, interactive}{96}
\entry{signal}{4}
\entry{signal handling}{45}
\entry{special builtin}{4, 78}
\entry{startup files}{94}
\entry{signal handling}{46}
\entry{special builtin}{4, 79}
\entry{startup files}{95}
\entry{string translations}{7}
\entry{suspending jobs}{116}
\entry{suspending jobs}{117}
\initial {T}
\entry{tilde expansion}{25}
\entry{token}{4}
\entry{translation, native languages}{7}
\initial {U}
\entry{unary arithmetic operators}{99}
\entry{unary arithmetic operators}{100}
\initial {V}
\entry{variable, shell}{21}
\entry{variables, readline}{124}
\entry{variables, readline}{125}
\initial {W}
\entry{word}{4}
\entry{word splitting}{35}
\entry{word splitting}{36}
\initial {Y}
\entry{yanking text}{122}
\entry{yanking text}{123}
BIN
View File
Binary file not shown.
+114 -114
View File
@@ -1,114 +1,114 @@
\entry{beginning-of-line (C-a)}{136}{\code {beginning-of-line (C-a)}}
\entry{end-of-line (C-e)}{136}{\code {end-of-line (C-e)}}
\entry{forward-char (C-f)}{136}{\code {forward-char (C-f)}}
\entry{backward-char (C-b)}{136}{\code {backward-char (C-b)}}
\entry{forward-word (M-f)}{136}{\code {forward-word (M-f)}}
\entry{backward-word (M-b)}{136}{\code {backward-word (M-b)}}
\entry{shell-forward-word (M-C-f)}{136}{\code {shell-forward-word (M-C-f)}}
\entry{shell-backward-word (M-C-b)}{136}{\code {shell-backward-word (M-C-b)}}
\entry{previous-screen-line ()}{136}{\code {previous-screen-line ()}}
\entry{next-screen-line ()}{137}{\code {next-screen-line ()}}
\entry{clear-display (M-C-l)}{137}{\code {clear-display (M-C-l)}}
\entry{clear-screen (C-l)}{137}{\code {clear-screen (C-l)}}
\entry{redraw-current-line ()}{137}{\code {redraw-current-line ()}}
\entry{accept-line (Newline or Return)}{137}{\code {accept-line (Newline or Return)}}
\entry{previous-history (C-p)}{137}{\code {previous-history (C-p)}}
\entry{next-history (C-n)}{137}{\code {next-history (C-n)}}
\entry{beginning-of-history (M-<)}{137}{\code {beginning-of-history (M-<)}}
\entry{end-of-history (M->)}{137}{\code {end-of-history (M->)}}
\entry{reverse-search-history (C-r)}{137}{\code {reverse-search-history (C-r)}}
\entry{forward-search-history (C-s)}{137}{\code {forward-search-history (C-s)}}
\entry{non-incremental-reverse-search-history (M-p)}{137}{\code {non-incremental-reverse-search-history (M-p)}}
\entry{non-incremental-forward-search-history (M-n)}{138}{\code {non-incremental-forward-search-history (M-n)}}
\entry{history-search-forward ()}{138}{\code {history-search-forward ()}}
\entry{history-search-backward ()}{138}{\code {history-search-backward ()}}
\entry{history-substring-search-forward ()}{138}{\code {history-substring-search-forward ()}}
\entry{history-substring-search-backward ()}{138}{\code {history-substring-search-backward ()}}
\entry{yank-nth-arg (M-C-y)}{138}{\code {yank-nth-arg (M-C-y)}}
\entry{yank-last-arg (M-. or M-_)}{138}{\code {yank-last-arg (M-. or M-_)}}
\entry{operate-and-get-next (C-o)}{138}{\code {operate-and-get-next (C-o)}}
\entry{fetch-history ()}{139}{\code {fetch-history ()}}
\entry{end-of-file (usually C-d)}{139}{\code {\i {end-of-file} (usually C-d)}}
\entry{delete-char (C-d)}{139}{\code {delete-char (C-d)}}
\entry{backward-delete-char (Rubout)}{139}{\code {backward-delete-char (Rubout)}}
\entry{forward-backward-delete-char ()}{139}{\code {forward-backward-delete-char ()}}
\entry{quoted-insert (C-q or C-v)}{139}{\code {quoted-insert (C-q or C-v)}}
\entry{self-insert (a, b, A, 1, !, ...{})}{139}{\code {self-insert (a, b, A, 1, !, \dots {})}}
\entry{bracketed-paste-begin ()}{139}{\code {bracketed-paste-begin ()}}
\entry{transpose-chars (C-t)}{139}{\code {transpose-chars (C-t)}}
\entry{transpose-words (M-t)}{140}{\code {transpose-words (M-t)}}
\entry{upcase-word (M-u)}{140}{\code {upcase-word (M-u)}}
\entry{downcase-word (M-l)}{140}{\code {downcase-word (M-l)}}
\entry{capitalize-word (M-c)}{140}{\code {capitalize-word (M-c)}}
\entry{overwrite-mode ()}{140}{\code {overwrite-mode ()}}
\entry{kill-line (C-k)}{140}{\code {kill-line (C-k)}}
\entry{backward-kill-line (C-x Rubout)}{140}{\code {backward-kill-line (C-x Rubout)}}
\entry{unix-line-discard (C-u)}{140}{\code {unix-line-discard (C-u)}}
\entry{kill-whole-line ()}{140}{\code {kill-whole-line ()}}
\entry{kill-word (M-d)}{140}{\code {kill-word (M-d)}}
\entry{backward-kill-word (M-DEL)}{140}{\code {backward-kill-word (M-\key {DEL})}}
\entry{shell-kill-word (M-C-d)}{141}{\code {shell-kill-word (M-C-d)}}
\entry{shell-backward-kill-word ()}{141}{\code {shell-backward-kill-word ()}}
\entry{shell-transpose-words (M-C-t)}{141}{\code {shell-transpose-words (M-C-t)}}
\entry{unix-word-rubout (C-w)}{141}{\code {unix-word-rubout (C-w)}}
\entry{unix-filename-rubout ()}{141}{\code {unix-filename-rubout ()}}
\entry{delete-horizontal-space ()}{141}{\code {delete-horizontal-space ()}}
\entry{kill-region ()}{141}{\code {kill-region ()}}
\entry{copy-region-as-kill ()}{141}{\code {copy-region-as-kill ()}}
\entry{copy-backward-word ()}{141}{\code {copy-backward-word ()}}
\entry{copy-forward-word ()}{141}{\code {copy-forward-word ()}}
\entry{yank (C-y)}{141}{\code {yank (C-y)}}
\entry{yank-pop (M-y)}{141}{\code {yank-pop (M-y)}}
\entry{digit-argument (M-0, M-1, ...{} M--)}{141}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
\entry{universal-argument ()}{142}{\code {universal-argument ()}}
\entry{complete (TAB)}{142}{\code {complete (\key {TAB})}}
\entry{possible-completions (M-?)}{142}{\code {possible-completions (M-?)}}
\entry{insert-completions (M-*)}{142}{\code {insert-completions (M-*)}}
\entry{menu-complete ()}{142}{\code {menu-complete ()}}
\entry{menu-complete-backward ()}{142}{\code {menu-complete-backward ()}}
\entry{delete-char-or-list ()}{142}{\code {delete-char-or-list ()}}
\entry{complete-filename (M-/)}{142}{\code {complete-filename (M-/)}}
\entry{possible-filename-completions (C-x /)}{143}{\code {possible-filename-completions (C-x /)}}
\entry{complete-username (M-~)}{143}{\code {complete-username (M-~)}}
\entry{possible-username-completions (C-x ~)}{143}{\code {possible-username-completions (C-x ~)}}
\entry{complete-variable (M-$)}{143}{\code {complete-variable (M-$)}}
\entry{possible-variable-completions (C-x $)}{143}{\code {possible-variable-completions (C-x $)}}
\entry{complete-hostname (M-@)}{143}{\code {complete-hostname (M-@)}}
\entry{possible-hostname-completions (C-x @)}{143}{\code {possible-hostname-completions (C-x @)}}
\entry{complete-command (M-!)}{143}{\code {complete-command (M-!)}}
\entry{possible-command-completions (C-x !)}{143}{\code {possible-command-completions (C-x !)}}
\entry{dynamic-complete-history (M-TAB)}{143}{\code {dynamic-complete-history (M-\key {TAB})}}
\entry{dabbrev-expand ()}{143}{\code {dabbrev-expand ()}}
\entry{complete-into-braces (M-{\indexlbrace })}{143}{\code {complete-into-braces (M-{\tt \char 123})}}
\entry{start-kbd-macro (C-x ()}{143}{\code {start-kbd-macro (C-x ()}}
\entry{end-kbd-macro (C-x ))}{143}{\code {end-kbd-macro (C-x ))}}
\entry{call-last-kbd-macro (C-x e)}{144}{\code {call-last-kbd-macro (C-x e)}}
\entry{print-last-kbd-macro ()}{144}{\code {print-last-kbd-macro ()}}
\entry{re-read-init-file (C-x C-r)}{144}{\code {re-read-init-file (C-x C-r)}}
\entry{abort (C-g)}{144}{\code {abort (C-g)}}
\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{144}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}
\entry{prefix-meta (ESC)}{144}{\code {prefix-meta (\key {ESC})}}
\entry{undo (C-_ or C-x C-u)}{144}{\code {undo (C-_ or C-x C-u)}}
\entry{revert-line (M-r)}{144}{\code {revert-line (M-r)}}
\entry{tilde-expand (M-&)}{144}{\code {tilde-expand (M-&)}}
\entry{set-mark (C-@)}{144}{\code {set-mark (C-@)}}
\entry{exchange-point-and-mark (C-x C-x)}{144}{\code {exchange-point-and-mark (C-x C-x)}}
\entry{character-search (C-])}{144}{\code {character-search (C-])}}
\entry{character-search-backward (M-C-])}{144}{\code {character-search-backward (M-C-])}}
\entry{skip-csi-sequence ()}{144}{\code {skip-csi-sequence ()}}
\entry{insert-comment (M-#)}{145}{\code {insert-comment (M-#)}}
\entry{dump-functions ()}{145}{\code {dump-functions ()}}
\entry{dump-variables ()}{145}{\code {dump-variables ()}}
\entry{dump-macros ()}{145}{\code {dump-macros ()}}
\entry{spell-correct-word (C-x s)}{145}{\code {spell-correct-word (C-x s)}}
\entry{glob-complete-word (M-g)}{145}{\code {glob-complete-word (M-g)}}
\entry{glob-expand-word (C-x *)}{145}{\code {glob-expand-word (C-x *)}}
\entry{glob-list-expansions (C-x g)}{145}{\code {glob-list-expansions (C-x g)}}
\entry{display-shell-version (C-x C-v)}{146}{\code {display-shell-version (C-x C-v)}}
\entry{shell-expand-line (M-C-e)}{146}{\code {shell-expand-line (M-C-e)}}
\entry{history-expand-line (M-^)}{146}{\code {history-expand-line (M-^)}}
\entry{magic-space ()}{146}{\code {magic-space ()}}
\entry{alias-expand-line ()}{146}{\code {alias-expand-line ()}}
\entry{history-and-alias-expand-line ()}{146}{\code {history-and-alias-expand-line ()}}
\entry{insert-last-argument (M-. or M-_)}{146}{\code {insert-last-argument (M-. or M-_)}}
\entry{edit-and-execute-command (C-x C-e)}{146}{\code {edit-and-execute-command (C-x C-e)}}
\entry{beginning-of-line (C-a)}{137}{\code {beginning-of-line (C-a)}}
\entry{end-of-line (C-e)}{137}{\code {end-of-line (C-e)}}
\entry{forward-char (C-f)}{137}{\code {forward-char (C-f)}}
\entry{backward-char (C-b)}{137}{\code {backward-char (C-b)}}
\entry{forward-word (M-f)}{137}{\code {forward-word (M-f)}}
\entry{backward-word (M-b)}{137}{\code {backward-word (M-b)}}
\entry{shell-forward-word (M-C-f)}{137}{\code {shell-forward-word (M-C-f)}}
\entry{shell-backward-word (M-C-b)}{137}{\code {shell-backward-word (M-C-b)}}
\entry{previous-screen-line ()}{137}{\code {previous-screen-line ()}}
\entry{next-screen-line ()}{138}{\code {next-screen-line ()}}
\entry{clear-display (M-C-l)}{138}{\code {clear-display (M-C-l)}}
\entry{clear-screen (C-l)}{138}{\code {clear-screen (C-l)}}
\entry{redraw-current-line ()}{138}{\code {redraw-current-line ()}}
\entry{accept-line (Newline or Return)}{138}{\code {accept-line (Newline or Return)}}
\entry{previous-history (C-p)}{138}{\code {previous-history (C-p)}}
\entry{next-history (C-n)}{138}{\code {next-history (C-n)}}
\entry{beginning-of-history (M-<)}{138}{\code {beginning-of-history (M-<)}}
\entry{end-of-history (M->)}{138}{\code {end-of-history (M->)}}
\entry{reverse-search-history (C-r)}{138}{\code {reverse-search-history (C-r)}}
\entry{forward-search-history (C-s)}{138}{\code {forward-search-history (C-s)}}
\entry{non-incremental-reverse-search-history (M-p)}{138}{\code {non-incremental-reverse-search-history (M-p)}}
\entry{non-incremental-forward-search-history (M-n)}{139}{\code {non-incremental-forward-search-history (M-n)}}
\entry{history-search-forward ()}{139}{\code {history-search-forward ()}}
\entry{history-search-backward ()}{139}{\code {history-search-backward ()}}
\entry{history-substring-search-forward ()}{139}{\code {history-substring-search-forward ()}}
\entry{history-substring-search-backward ()}{139}{\code {history-substring-search-backward ()}}
\entry{yank-nth-arg (M-C-y)}{139}{\code {yank-nth-arg (M-C-y)}}
\entry{yank-last-arg (M-. or M-_)}{139}{\code {yank-last-arg (M-. or M-_)}}
\entry{operate-and-get-next (C-o)}{139}{\code {operate-and-get-next (C-o)}}
\entry{fetch-history ()}{140}{\code {fetch-history ()}}
\entry{end-of-file (usually C-d)}{140}{\code {\i {end-of-file} (usually C-d)}}
\entry{delete-char (C-d)}{140}{\code {delete-char (C-d)}}
\entry{backward-delete-char (Rubout)}{140}{\code {backward-delete-char (Rubout)}}
\entry{forward-backward-delete-char ()}{140}{\code {forward-backward-delete-char ()}}
\entry{quoted-insert (C-q or C-v)}{140}{\code {quoted-insert (C-q or C-v)}}
\entry{self-insert (a, b, A, 1, !, ...{})}{140}{\code {self-insert (a, b, A, 1, !, \dots {})}}
\entry{bracketed-paste-begin ()}{140}{\code {bracketed-paste-begin ()}}
\entry{transpose-chars (C-t)}{140}{\code {transpose-chars (C-t)}}
\entry{transpose-words (M-t)}{141}{\code {transpose-words (M-t)}}
\entry{upcase-word (M-u)}{141}{\code {upcase-word (M-u)}}
\entry{downcase-word (M-l)}{141}{\code {downcase-word (M-l)}}
\entry{capitalize-word (M-c)}{141}{\code {capitalize-word (M-c)}}
\entry{overwrite-mode ()}{141}{\code {overwrite-mode ()}}
\entry{kill-line (C-k)}{141}{\code {kill-line (C-k)}}
\entry{backward-kill-line (C-x Rubout)}{141}{\code {backward-kill-line (C-x Rubout)}}
\entry{unix-line-discard (C-u)}{141}{\code {unix-line-discard (C-u)}}
\entry{kill-whole-line ()}{141}{\code {kill-whole-line ()}}
\entry{kill-word (M-d)}{141}{\code {kill-word (M-d)}}
\entry{backward-kill-word (M-DEL)}{141}{\code {backward-kill-word (M-\key {DEL})}}
\entry{shell-kill-word (M-C-d)}{142}{\code {shell-kill-word (M-C-d)}}
\entry{shell-backward-kill-word ()}{142}{\code {shell-backward-kill-word ()}}
\entry{shell-transpose-words (M-C-t)}{142}{\code {shell-transpose-words (M-C-t)}}
\entry{unix-word-rubout (C-w)}{142}{\code {unix-word-rubout (C-w)}}
\entry{unix-filename-rubout ()}{142}{\code {unix-filename-rubout ()}}
\entry{delete-horizontal-space ()}{142}{\code {delete-horizontal-space ()}}
\entry{kill-region ()}{142}{\code {kill-region ()}}
\entry{copy-region-as-kill ()}{142}{\code {copy-region-as-kill ()}}
\entry{copy-backward-word ()}{142}{\code {copy-backward-word ()}}
\entry{copy-forward-word ()}{142}{\code {copy-forward-word ()}}
\entry{yank (C-y)}{142}{\code {yank (C-y)}}
\entry{yank-pop (M-y)}{142}{\code {yank-pop (M-y)}}
\entry{digit-argument (M-0, M-1, ...{} M--)}{142}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
\entry{universal-argument ()}{143}{\code {universal-argument ()}}
\entry{complete (TAB)}{143}{\code {complete (\key {TAB})}}
\entry{possible-completions (M-?)}{143}{\code {possible-completions (M-?)}}
\entry{insert-completions (M-*)}{143}{\code {insert-completions (M-*)}}
\entry{menu-complete ()}{143}{\code {menu-complete ()}}
\entry{menu-complete-backward ()}{143}{\code {menu-complete-backward ()}}
\entry{delete-char-or-list ()}{143}{\code {delete-char-or-list ()}}
\entry{complete-filename (M-/)}{143}{\code {complete-filename (M-/)}}
\entry{possible-filename-completions (C-x /)}{144}{\code {possible-filename-completions (C-x /)}}
\entry{complete-username (M-~)}{144}{\code {complete-username (M-~)}}
\entry{possible-username-completions (C-x ~)}{144}{\code {possible-username-completions (C-x ~)}}
\entry{complete-variable (M-$)}{144}{\code {complete-variable (M-$)}}
\entry{possible-variable-completions (C-x $)}{144}{\code {possible-variable-completions (C-x $)}}
\entry{complete-hostname (M-@)}{144}{\code {complete-hostname (M-@)}}
\entry{possible-hostname-completions (C-x @)}{144}{\code {possible-hostname-completions (C-x @)}}
\entry{complete-command (M-!)}{144}{\code {complete-command (M-!)}}
\entry{possible-command-completions (C-x !)}{144}{\code {possible-command-completions (C-x !)}}
\entry{dynamic-complete-history (M-TAB)}{144}{\code {dynamic-complete-history (M-\key {TAB})}}
\entry{dabbrev-expand ()}{144}{\code {dabbrev-expand ()}}
\entry{complete-into-braces (M-{\indexlbrace })}{144}{\code {complete-into-braces (M-{\tt \char 123})}}
\entry{start-kbd-macro (C-x ()}{144}{\code {start-kbd-macro (C-x ()}}
\entry{end-kbd-macro (C-x ))}{144}{\code {end-kbd-macro (C-x ))}}
\entry{call-last-kbd-macro (C-x e)}{145}{\code {call-last-kbd-macro (C-x e)}}
\entry{print-last-kbd-macro ()}{145}{\code {print-last-kbd-macro ()}}
\entry{re-read-init-file (C-x C-r)}{145}{\code {re-read-init-file (C-x C-r)}}
\entry{abort (C-g)}{145}{\code {abort (C-g)}}
\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{145}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}
\entry{prefix-meta (ESC)}{145}{\code {prefix-meta (\key {ESC})}}
\entry{undo (C-_ or C-x C-u)}{145}{\code {undo (C-_ or C-x C-u)}}
\entry{revert-line (M-r)}{145}{\code {revert-line (M-r)}}
\entry{tilde-expand (M-&)}{145}{\code {tilde-expand (M-&)}}
\entry{set-mark (C-@)}{145}{\code {set-mark (C-@)}}
\entry{exchange-point-and-mark (C-x C-x)}{145}{\code {exchange-point-and-mark (C-x C-x)}}
\entry{character-search (C-])}{145}{\code {character-search (C-])}}
\entry{character-search-backward (M-C-])}{145}{\code {character-search-backward (M-C-])}}
\entry{skip-csi-sequence ()}{145}{\code {skip-csi-sequence ()}}
\entry{insert-comment (M-#)}{146}{\code {insert-comment (M-#)}}
\entry{dump-functions ()}{146}{\code {dump-functions ()}}
\entry{dump-variables ()}{146}{\code {dump-variables ()}}
\entry{dump-macros ()}{146}{\code {dump-macros ()}}
\entry{spell-correct-word (C-x s)}{146}{\code {spell-correct-word (C-x s)}}
\entry{glob-complete-word (M-g)}{146}{\code {glob-complete-word (M-g)}}
\entry{glob-expand-word (C-x *)}{146}{\code {glob-expand-word (C-x *)}}
\entry{glob-list-expansions (C-x g)}{146}{\code {glob-list-expansions (C-x g)}}
\entry{display-shell-version (C-x C-v)}{147}{\code {display-shell-version (C-x C-v)}}
\entry{shell-expand-line (M-C-e)}{147}{\code {shell-expand-line (M-C-e)}}
\entry{history-expand-line (M-^)}{147}{\code {history-expand-line (M-^)}}
\entry{magic-space ()}{147}{\code {magic-space ()}}
\entry{alias-expand-line ()}{147}{\code {alias-expand-line ()}}
\entry{history-and-alias-expand-line ()}{147}{\code {history-and-alias-expand-line ()}}
\entry{insert-last-argument (M-. or M-_)}{147}{\code {insert-last-argument (M-. or M-_)}}
\entry{edit-and-execute-command (C-x C-e)}{147}{\code {edit-and-execute-command (C-x C-e)}}
+114 -114
View File
@@ -1,134 +1,134 @@
\initial {A}
\entry{\code {abort (C-g)}}{144}
\entry{\code {accept-line (Newline or Return)}}{137}
\entry{\code {alias-expand-line ()}}{146}
\entry{\code {abort (C-g)}}{145}
\entry{\code {accept-line (Newline or Return)}}{138}
\entry{\code {alias-expand-line ()}}{147}
\initial {B}
\entry{\code {backward-char (C-b)}}{136}
\entry{\code {backward-delete-char (Rubout)}}{139}
\entry{\code {backward-kill-line (C-x Rubout)}}{140}
\entry{\code {backward-kill-word (M-\key {DEL})}}{140}
\entry{\code {backward-word (M-b)}}{136}
\entry{\code {beginning-of-history (M-<)}}{137}
\entry{\code {beginning-of-line (C-a)}}{136}
\entry{\code {bracketed-paste-begin ()}}{139}
\entry{\code {backward-char (C-b)}}{137}
\entry{\code {backward-delete-char (Rubout)}}{140}
\entry{\code {backward-kill-line (C-x Rubout)}}{141}
\entry{\code {backward-kill-word (M-\key {DEL})}}{141}
\entry{\code {backward-word (M-b)}}{137}
\entry{\code {beginning-of-history (M-<)}}{138}
\entry{\code {beginning-of-line (C-a)}}{137}
\entry{\code {bracketed-paste-begin ()}}{140}
\initial {C}
\entry{\code {call-last-kbd-macro (C-x e)}}{144}
\entry{\code {capitalize-word (M-c)}}{140}
\entry{\code {character-search (C-])}}{144}
\entry{\code {character-search-backward (M-C-])}}{144}
\entry{\code {clear-display (M-C-l)}}{137}
\entry{\code {clear-screen (C-l)}}{137}
\entry{\code {complete (\key {TAB})}}{142}
\entry{\code {complete-command (M-!)}}{143}
\entry{\code {complete-filename (M-/)}}{142}
\entry{\code {complete-hostname (M-@)}}{143}
\entry{\code {complete-into-braces (M-{\tt \char 123})}}{143}
\entry{\code {complete-username (M-~)}}{143}
\entry{\code {complete-variable (M-$)}}{143}
\entry{\code {copy-backward-word ()}}{141}
\entry{\code {copy-forward-word ()}}{141}
\entry{\code {copy-region-as-kill ()}}{141}
\entry{\code {call-last-kbd-macro (C-x e)}}{145}
\entry{\code {capitalize-word (M-c)}}{141}
\entry{\code {character-search (C-])}}{145}
\entry{\code {character-search-backward (M-C-])}}{145}
\entry{\code {clear-display (M-C-l)}}{138}
\entry{\code {clear-screen (C-l)}}{138}
\entry{\code {complete (\key {TAB})}}{143}
\entry{\code {complete-command (M-!)}}{144}
\entry{\code {complete-filename (M-/)}}{143}
\entry{\code {complete-hostname (M-@)}}{144}
\entry{\code {complete-into-braces (M-{\tt \char 123})}}{144}
\entry{\code {complete-username (M-~)}}{144}
\entry{\code {complete-variable (M-$)}}{144}
\entry{\code {copy-backward-word ()}}{142}
\entry{\code {copy-forward-word ()}}{142}
\entry{\code {copy-region-as-kill ()}}{142}
\initial {D}
\entry{\code {dabbrev-expand ()}}{143}
\entry{\code {delete-char (C-d)}}{139}
\entry{\code {delete-char-or-list ()}}{142}
\entry{\code {delete-horizontal-space ()}}{141}
\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{141}
\entry{\code {display-shell-version (C-x C-v)}}{146}
\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{144}
\entry{\code {downcase-word (M-l)}}{140}
\entry{\code {dump-functions ()}}{145}
\entry{\code {dump-macros ()}}{145}
\entry{\code {dump-variables ()}}{145}
\entry{\code {dynamic-complete-history (M-\key {TAB})}}{143}
\entry{\code {dabbrev-expand ()}}{144}
\entry{\code {delete-char (C-d)}}{140}
\entry{\code {delete-char-or-list ()}}{143}
\entry{\code {delete-horizontal-space ()}}{142}
\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{142}
\entry{\code {display-shell-version (C-x C-v)}}{147}
\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{145}
\entry{\code {downcase-word (M-l)}}{141}
\entry{\code {dump-functions ()}}{146}
\entry{\code {dump-macros ()}}{146}
\entry{\code {dump-variables ()}}{146}
\entry{\code {dynamic-complete-history (M-\key {TAB})}}{144}
\initial {E}
\entry{\code {edit-and-execute-command (C-x C-e)}}{146}
\entry{\code {end-kbd-macro (C-x ))}}{143}
\entry{\code {\i {end-of-file} (usually C-d)}}{139}
\entry{\code {end-of-history (M->)}}{137}
\entry{\code {end-of-line (C-e)}}{136}
\entry{\code {exchange-point-and-mark (C-x C-x)}}{144}
\entry{\code {edit-and-execute-command (C-x C-e)}}{147}
\entry{\code {end-kbd-macro (C-x ))}}{144}
\entry{\code {\i {end-of-file} (usually C-d)}}{140}
\entry{\code {end-of-history (M->)}}{138}
\entry{\code {end-of-line (C-e)}}{137}
\entry{\code {exchange-point-and-mark (C-x C-x)}}{145}
\initial {F}
\entry{\code {fetch-history ()}}{139}
\entry{\code {forward-backward-delete-char ()}}{139}
\entry{\code {forward-char (C-f)}}{136}
\entry{\code {forward-search-history (C-s)}}{137}
\entry{\code {forward-word (M-f)}}{136}
\entry{\code {fetch-history ()}}{140}
\entry{\code {forward-backward-delete-char ()}}{140}
\entry{\code {forward-char (C-f)}}{137}
\entry{\code {forward-search-history (C-s)}}{138}
\entry{\code {forward-word (M-f)}}{137}
\initial {G}
\entry{\code {glob-complete-word (M-g)}}{145}
\entry{\code {glob-expand-word (C-x *)}}{145}
\entry{\code {glob-list-expansions (C-x g)}}{145}
\entry{\code {glob-complete-word (M-g)}}{146}
\entry{\code {glob-expand-word (C-x *)}}{146}
\entry{\code {glob-list-expansions (C-x g)}}{146}
\initial {H}
\entry{\code {history-and-alias-expand-line ()}}{146}
\entry{\code {history-expand-line (M-^)}}{146}
\entry{\code {history-search-backward ()}}{138}
\entry{\code {history-search-forward ()}}{138}
\entry{\code {history-substring-search-backward ()}}{138}
\entry{\code {history-substring-search-forward ()}}{138}
\entry{\code {history-and-alias-expand-line ()}}{147}
\entry{\code {history-expand-line (M-^)}}{147}
\entry{\code {history-search-backward ()}}{139}
\entry{\code {history-search-forward ()}}{139}
\entry{\code {history-substring-search-backward ()}}{139}
\entry{\code {history-substring-search-forward ()}}{139}
\initial {I}
\entry{\code {insert-comment (M-#)}}{145}
\entry{\code {insert-completions (M-*)}}{142}
\entry{\code {insert-last-argument (M-. or M-_)}}{146}
\entry{\code {insert-comment (M-#)}}{146}
\entry{\code {insert-completions (M-*)}}{143}
\entry{\code {insert-last-argument (M-. or M-_)}}{147}
\initial {K}
\entry{\code {kill-line (C-k)}}{140}
\entry{\code {kill-region ()}}{141}
\entry{\code {kill-whole-line ()}}{140}
\entry{\code {kill-word (M-d)}}{140}
\entry{\code {kill-line (C-k)}}{141}
\entry{\code {kill-region ()}}{142}
\entry{\code {kill-whole-line ()}}{141}
\entry{\code {kill-word (M-d)}}{141}
\initial {M}
\entry{\code {magic-space ()}}{146}
\entry{\code {menu-complete ()}}{142}
\entry{\code {menu-complete-backward ()}}{142}
\entry{\code {magic-space ()}}{147}
\entry{\code {menu-complete ()}}{143}
\entry{\code {menu-complete-backward ()}}{143}
\initial {N}
\entry{\code {next-history (C-n)}}{137}
\entry{\code {next-screen-line ()}}{137}
\entry{\code {non-incremental-forward-search-history (M-n)}}{138}
\entry{\code {non-incremental-reverse-search-history (M-p)}}{137}
\entry{\code {next-history (C-n)}}{138}
\entry{\code {next-screen-line ()}}{138}
\entry{\code {non-incremental-forward-search-history (M-n)}}{139}
\entry{\code {non-incremental-reverse-search-history (M-p)}}{138}
\initial {O}
\entry{\code {operate-and-get-next (C-o)}}{138}
\entry{\code {overwrite-mode ()}}{140}
\entry{\code {operate-and-get-next (C-o)}}{139}
\entry{\code {overwrite-mode ()}}{141}
\initial {P}
\entry{\code {possible-command-completions (C-x !)}}{143}
\entry{\code {possible-completions (M-?)}}{142}
\entry{\code {possible-filename-completions (C-x /)}}{143}
\entry{\code {possible-hostname-completions (C-x @)}}{143}
\entry{\code {possible-username-completions (C-x ~)}}{143}
\entry{\code {possible-variable-completions (C-x $)}}{143}
\entry{\code {prefix-meta (\key {ESC})}}{144}
\entry{\code {previous-history (C-p)}}{137}
\entry{\code {previous-screen-line ()}}{136}
\entry{\code {print-last-kbd-macro ()}}{144}
\entry{\code {possible-command-completions (C-x !)}}{144}
\entry{\code {possible-completions (M-?)}}{143}
\entry{\code {possible-filename-completions (C-x /)}}{144}
\entry{\code {possible-hostname-completions (C-x @)}}{144}
\entry{\code {possible-username-completions (C-x ~)}}{144}
\entry{\code {possible-variable-completions (C-x $)}}{144}
\entry{\code {prefix-meta (\key {ESC})}}{145}
\entry{\code {previous-history (C-p)}}{138}
\entry{\code {previous-screen-line ()}}{137}
\entry{\code {print-last-kbd-macro ()}}{145}
\initial {Q}
\entry{\code {quoted-insert (C-q or C-v)}}{139}
\entry{\code {quoted-insert (C-q or C-v)}}{140}
\initial {R}
\entry{\code {re-read-init-file (C-x C-r)}}{144}
\entry{\code {redraw-current-line ()}}{137}
\entry{\code {reverse-search-history (C-r)}}{137}
\entry{\code {revert-line (M-r)}}{144}
\entry{\code {re-read-init-file (C-x C-r)}}{145}
\entry{\code {redraw-current-line ()}}{138}
\entry{\code {reverse-search-history (C-r)}}{138}
\entry{\code {revert-line (M-r)}}{145}
\initial {S}
\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{139}
\entry{\code {set-mark (C-@)}}{144}
\entry{\code {shell-backward-kill-word ()}}{141}
\entry{\code {shell-backward-word (M-C-b)}}{136}
\entry{\code {shell-expand-line (M-C-e)}}{146}
\entry{\code {shell-forward-word (M-C-f)}}{136}
\entry{\code {shell-kill-word (M-C-d)}}{141}
\entry{\code {shell-transpose-words (M-C-t)}}{141}
\entry{\code {skip-csi-sequence ()}}{144}
\entry{\code {spell-correct-word (C-x s)}}{145}
\entry{\code {start-kbd-macro (C-x ()}}{143}
\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{140}
\entry{\code {set-mark (C-@)}}{145}
\entry{\code {shell-backward-kill-word ()}}{142}
\entry{\code {shell-backward-word (M-C-b)}}{137}
\entry{\code {shell-expand-line (M-C-e)}}{147}
\entry{\code {shell-forward-word (M-C-f)}}{137}
\entry{\code {shell-kill-word (M-C-d)}}{142}
\entry{\code {shell-transpose-words (M-C-t)}}{142}
\entry{\code {skip-csi-sequence ()}}{145}
\entry{\code {spell-correct-word (C-x s)}}{146}
\entry{\code {start-kbd-macro (C-x ()}}{144}
\initial {T}
\entry{\code {tilde-expand (M-&)}}{144}
\entry{\code {transpose-chars (C-t)}}{139}
\entry{\code {transpose-words (M-t)}}{140}
\entry{\code {tilde-expand (M-&)}}{145}
\entry{\code {transpose-chars (C-t)}}{140}
\entry{\code {transpose-words (M-t)}}{141}
\initial {U}
\entry{\code {undo (C-_ or C-x C-u)}}{144}
\entry{\code {universal-argument ()}}{142}
\entry{\code {unix-filename-rubout ()}}{141}
\entry{\code {unix-line-discard (C-u)}}{140}
\entry{\code {unix-word-rubout (C-w)}}{141}
\entry{\code {upcase-word (M-u)}}{140}
\entry{\code {undo (C-_ or C-x C-u)}}{145}
\entry{\code {universal-argument ()}}{143}
\entry{\code {unix-filename-rubout ()}}{142}
\entry{\code {unix-line-discard (C-u)}}{141}
\entry{\code {unix-word-rubout (C-w)}}{142}
\entry{\code {upcase-word (M-u)}}{141}
\initial {Y}
\entry{\code {yank (C-y)}}{141}
\entry{\code {yank-last-arg (M-. or M-_)}}{138}
\entry{\code {yank-nth-arg (M-C-y)}}{138}
\entry{\code {yank-pop (M-y)}}{141}
\entry{\code {yank (C-y)}}{142}
\entry{\code {yank-last-arg (M-. or M-_)}}{139}
\entry{\code {yank-nth-arg (M-C-y)}}{139}
\entry{\code {yank-pop (M-y)}}{142}
+78 -25
View File
@@ -4,9 +4,9 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This text is a brief description of the features that are present in
the Bash shell (version 5.2, 17 April 2023).
the Bash shell (version 5.2, 14 May 2023).
This is Edition 5.2, last updated 17 April 2023,
This is Edition 5.2, last updated 14 May 2023,
of The GNU Bash Reference Manual,
for Bash, Version 5.2.
@@ -77,10 +77,10 @@ Next: <a href="#Introduction" accesskey="n" rel="next">Introduction</a>, Previou
<span id="Bash-Features-1"></span><h1 class="top">Bash Features</h1>
<p>This text is a brief description of the features that are present in
the Bash shell (version 5.2, 17 April 2023).
the Bash shell (version 5.2, 14 May 2023).
The Bash home page is <a href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>.
</p>
<p>This is Edition 5.2, last updated 17 April 2023,
<p>This is Edition 5.2, last updated 14 May 2023,
of <cite>The GNU Bash Reference Manual</cite>,
for <code>Bash</code>, Version 5.2.
</p>
@@ -737,8 +737,8 @@ Next: <a href="#Locale-Translation" accesskey="n" rel="next">Locale-Specific Tra
<span id="ANSI_002dC-Quoting-1"></span><h4 class="subsubsection">3.1.2.4 ANSI-C Quoting</h4>
<span id="index-quoting_002c-ANSI"></span>
<p>Character sequences of the form $&rsquo;<var>string</var>&rsquo; are treated as a special
kind of single quotes.
<p>Character sequences of the form <code>$'<var>string</var>'</code> are treated as
a special kind of single quotes.
The sequence expands to <var>string</var>, with backslash-escaped characters
in <var>string</var> replaced as specified by the ANSI C standard.
Backslash escape sequences, if present, are decoded as follows:
@@ -3049,24 +3049,25 @@ Next: <a href="#Arithmetic-Expansion" accesskey="n" rel="next">Arithmetic Expans
<p>Command substitution allows the output of a command to replace
the command itself.
Command substitution occurs when a command is enclosed as follows:
The standard form of command substitution occurs when a command is
enclosed as follows:
</p><div class="example">
<pre class="example">$(<var>command</var>)
</pre></div>
<p>or
<p>or (deprecated)
</p><div class="example">
<pre class="example">`<var>command</var>`
<pre class="example">`<var>command</var>`.
</pre></div>
<p>Bash performs the expansion by executing <var>command</var> in a subshell environment
and replacing the command substitution with the standard output of the
command, with any trailing newlines deleted.
<p>Bash performs the expansion by executing <var>command</var> in a subshell
environment and replacing the command substitution with the standard
output of the command, with any trailing newlines deleted.
Embedded newlines are not deleted, but they may be removed during
word splitting.
The command substitution <code>$(cat <var>file</var>)</code> can be
replaced by the equivalent but faster <code>$(&lt; <var>file</var>)</code>.
</p>
<p>When the old-style backquote form of substitution is used,
<p>With the old-style backquote form of substitution,
backslash retains its literal meaning except when followed by
&lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, or &lsquo;<samp>\</samp>&rsquo;.
The first backquote not preceded by a backslash terminates the
@@ -3074,11 +3075,70 @@ command substitution.
When using the <code>$(<var>command</var>)</code> form, all characters between
the parentheses make up the command; none are treated specially.
</p>
<p>There is an alternate form of command substitution:
</p>
<div class="example">
<pre class="example">${<var>C</var> <var>command</var>; }
</pre></div>
<p>which executes <var>command</var> in the current execution environment.
This means that side effects of <var>command</var> take effect immediately
in the current execution environment and persist in the current
environment after the command completes (e.g., the <code>exit</code> builtin
will exit the shell).
</p>
<p>The character <var>C</var> following the open brace must be a space, tab,
newline, &lsquo;<samp>(</samp>&rsquo;, or &lsquo;<samp>|</samp>&rsquo;, and the close brace must be in a position
where a reserved word may appear (i.e., preceded by a command terminator
such as semicolon).
Bash allows the close brace to be joined to the remaining characters in
the word without being followed by a shell metacharacter as a reserved
word would usually require.
</p>
<p>This type of command substitution superficially resembles executing an
unnamed shell function: local variables are created as when a shell
function is executing, and the <code>return</code> builtin forces
<var>command</var> to complete;
however, the rest of the execution environment,
including the positional parameters, is shared with the caller.
</p>
<p>If the first character following the open brace is a &lsquo;<samp>(</samp>&rsquo;,
<var>command</var> is executed in a subshell, and <var>command</var> must be
terminated by a &lsquo;<samp>)</samp>&rsquo;. This is similar to the <code>(</code> compound
command (see <a href="#Command-Grouping">Grouping Commands</a>).
If the first character is a &lsquo;<samp>|</samp>&rsquo;, the construct expands to the
value of the <code>REPLY</code> shell variable after <var>command</var> executes,
without removing any trailing newlines,
and the standard output of <var>command</var> remains the same as in the
calling shell.
Bash creates <code>REPLY</code> as an initially-unset local variable when
<var>command</var> executes, and restores <code>REPLY</code> to the value it had
before the command substitution after <var>command</var> completes,
as with any local variable.
</p>
<p>For example, this construct expands to &lsquo;<samp>12345</samp>&rsquo;, and leaves the
shell variable <code>X</code> unchanged in the current execution environment:
</p>
<div class="example">
<pre class="example">${ local X=12345 ; echo $X; }
</pre></div>
<p>(not declaring <code>X</code> as local would modify its value in the current
environment, as with normal shell function execution),
while this construct does not require any output to expand to
&lsquo;<samp>12345</samp>&rsquo;:
</p>
<div class="example">
<pre class="example">${| REPLY=12345; }
</pre></div>
<p>and restores <code>REPLY</code> to the value it had before the command substitution.
</p>
<p>Command substitutions may be nested. To nest when using the backquoted
form, escape the inner backquotes with backslashes.
</p>
<p>If the substitution appears within double quotes, word splitting and
filename expansion are not performed on the results.
<p>If the substitution appears within double quotes, Bash does not perform
word splitting and filename expansion on the results.
</p>
<hr>
</div>
@@ -7294,6 +7354,9 @@ inode change time, and number of blocks, respectively.
<p>For example, a value of <code>-mtime</code> sorts the results in descending
order by modification time (newest first).
</p>
<p>A sort specifier of &lsquo;<samp>nosort</samp>&rsquo; disables sorting completely; the results
are returned in the order they are read from the file system,.
</p>
<p>If the sort specifier is missing, it defaults to <var>name</var>,
so a value of &lsquo;<samp>+</samp>&rsquo; is equivalent to the null string,
and a value of &lsquo;<samp>-</samp>&rsquo; sorts by name in descending order.
@@ -9655,16 +9718,6 @@ and it is required for bash-5.1 and later versions.
has no special effect
</li></ul>
</dd>
<dt><span><code>compat32</code></span></dt>
<dd><ul>
<li> interrupting a command list such as &quot;a ; b ; c&quot; causes the execution
of the next command in the list (in bash-4.0 and later versions,
the shell acts as if it received the interrupt, so
interrupting one command in a list aborts the execution of the
entire list)
</li></ul>
</dd>
<dt><span><code>compat40</code></span></dt>
<dd><ul>
+194 -147
View File
@@ -2,9 +2,9 @@ This is bashref.info, produced by makeinfo version 6.8 from
bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.2, 20 April 2023).
Bash shell (version 5.2, 14 May 2023).
This is Edition 5.2, last updated 20 April 2023, of 'The GNU Bash
This is Edition 5.2, last updated 14 May 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.2.
Copyright (C) 1988-2023 Free Software Foundation, Inc.
@@ -27,10 +27,10 @@ Bash Features
*************
This text is a brief description of the features that are present in the
Bash shell (version 5.2, 20 April 2023). The Bash home page is
Bash shell (version 5.2, 14 May 2023). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.2, last updated 20 April 2023, of 'The GNU Bash
This is Edition 5.2, last updated 14 May 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.2.
Bash contains features that appear in other popular shells, and some
@@ -419,8 +419,8 @@ File: bashref.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Dou
3.1.2.4 ANSI-C Quoting
......................
Character sequences of the form $'STRING' are treated as a special kind
of single quotes. The sequence expands to STRING, with
Character sequences of the form '$'STRING'' are treated as a special
kind of single quotes. The sequence expands to STRING, with
backslash-escaped characters in STRING replaced as specified by the ANSI
C standard. Backslash escape sequences, if present, are decoded as
follows:
@@ -2240,11 +2240,11 @@ File: bashref.info, Node: Command Substitution, Next: Arithmetic Expansion, P
--------------------------
Command substitution allows the output of a command to replace the
command itself. Command substitution occurs when a command is enclosed
as follows:
command itself. The standard form of command substitution occurs when a
command is enclosed as follows:
$(COMMAND)
or
`COMMAND`
or (deprecated)
`COMMAND`.
Bash performs the expansion by executing COMMAND in a subshell
environment and replacing the command substitution with the standard
@@ -2253,17 +2253,64 @@ newlines are not deleted, but they may be removed during word splitting.
The command substitution '$(cat FILE)' can be replaced by the equivalent
but faster '$(< FILE)'.
When the old-style backquote form of substitution is used, backslash
retains its literal meaning except when followed by '$', '`', or '\'.
The first backquote not preceded by a backslash terminates the command
With the old-style backquote form of substitution, backslash retains
its literal meaning except when followed by '$', '`', or '\'. The first
backquote not preceded by a backslash terminates the command
substitution. When using the '$(COMMAND)' form, all characters between
the parentheses make up the command; none are treated specially.
There is an alternate form of command substitution:
${C COMMAND; }
which executes COMMAND in the current execution environment. This means
that side effects of COMMAND take effect immediately in the current
execution environment and persist in the current environment after the
command completes (e.g., the 'exit' builtin will exit the shell).
The character C following the open brace must be a space, tab,
newline, '(', or '|', and the close brace must be in a position where a
reserved word may appear (i.e., preceded by a command terminator such as
semicolon). Bash allows the close brace to be joined to the remaining
characters in the word without being followed by a shell metacharacter
as a reserved word would usually require.
This type of command substitution superficially resembles executing
an unnamed shell function: local variables are created as when a shell
function is executing, and the 'return' builtin forces COMMAND to
complete; however, the rest of the execution environment, including the
positional parameters, is shared with the caller.
If the first character following the open brace is a '(', COMMAND is
executed in a subshell, and COMMAND must be terminated by a ')'. This
is similar to the '(' compound command (*note Command Grouping::). If
the first character is a '|', the construct expands to the value of the
'REPLY' shell variable after COMMAND executes, without removing any
trailing newlines, and the standard output of COMMAND remains the same
as in the calling shell. Bash creates 'REPLY' as an initially-unset
local variable when COMMAND executes, and restores 'REPLY' to the value
it had before the command substitution after COMMAND completes, as with
any local variable.
For example, this construct expands to '12345', and leaves the shell
variable 'X' unchanged in the current execution environment:
${ local X=12345 ; echo $X; }
(not declaring 'X' as local would modify its value in the current
environment, as with normal shell function execution), while this
construct does not require any output to expand to '12345':
${| REPLY=12345; }
and restores 'REPLY' to the value it had before the command
substitution.
Command substitutions may be nested. To nest when using the
backquoted form, escape the inner backquotes with backslashes.
If the substitution appears within double quotes, word splitting and
filename expansion are not performed on the results.
If the substitution appears within double quotes, Bash does not
perform word splitting and filename expansion on the results.

File: bashref.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions
@@ -12707,138 +12754,138 @@ D.5 Concept Index

Tag Table:
Node: Top891
Node: Introduction2805
Node: What is Bash?3021
Node: What is a shell?4135
Node: Definitions6673
Node: Basic Shell Features9624
Node: Shell Syntax10843
Node: Shell Operation11869
Node: Quoting13162
Node: Escape Character14466
Node: Single Quotes14951
Node: Double Quotes15299
Node: ANSI-C Quoting16577
Node: Locale Translation17887
Node: Creating Internationalized Scripts19198
Node: Comments23315
Node: Shell Commands23933
Node: Reserved Words24871
Node: Simple Commands25627
Node: Pipelines26281
Node: Lists29280
Node: Compound Commands31075
Node: Looping Constructs32087
Node: Conditional Constructs34582
Node: Command Grouping49070
Node: Coprocesses50548
Node: GNU Parallel53211
Node: Shell Functions54128
Node: Shell Parameters62013
Node: Positional Parameters66401
Node: Special Parameters67303
Node: Shell Expansions70517
Node: Brace Expansion72644
Node: Tilde Expansion75378
Node: Shell Parameter Expansion77999
Node: Command Substitution96401
Node: Arithmetic Expansion97756
Node: Process Substitution98724
Node: Word Splitting99844
Node: Filename Expansion101892
Node: Pattern Matching104825
Node: Quote Removal109827
Node: Redirections110122
Node: Executing Commands119815
Node: Simple Command Expansion120485
Node: Command Search and Execution122595
Node: Command Execution Environment124982
Node: Environment128017
Node: Exit Status129680
Node: Signals131464
Node: Shell Scripts134913
Node: Shell Builtin Commands137940
Node: Bourne Shell Builtins139978
Node: Bash Builtins162177
Node: Modifying Shell Behavior194176
Node: The Set Builtin194521
Node: The Shopt Builtin205119
Node: Special Builtins221031
Node: Shell Variables222010
Node: Bourne Shell Variables222447
Node: Bash Variables224551
Node: Bash Features258616
Node: Invoking Bash259629
Node: Bash Startup Files265642
Node: Interactive Shells270773
Node: What is an Interactive Shell?271184
Node: Is this Shell Interactive?271833
Node: Interactive Shell Behavior272648
Node: Bash Conditional Expressions276277
Node: Shell Arithmetic280919
Node: Aliases283880
Node: Arrays286774
Node: The Directory Stack293337
Node: Directory Stack Builtins294121
Node: Controlling the Prompt298381
Node: The Restricted Shell301346
Node: Bash POSIX Mode303956
Node: Shell Compatibility Mode319749
Node: Job Control327993
Node: Job Control Basics328453
Node: Job Control Builtins333455
Node: Job Control Variables339250
Node: Command Line Editing340406
Node: Introduction and Notation342077
Node: Readline Interaction343700
Node: Readline Bare Essentials344891
Node: Readline Movement Commands346680
Node: Readline Killing Commands347640
Node: Readline Arguments349561
Node: Searching350605
Node: Readline Init File352791
Node: Readline Init File Syntax354052
Node: Conditional Init Constructs377843
Node: Sample Init File382039
Node: Bindable Readline Commands385163
Node: Commands For Moving386367
Node: Commands For History388418
Node: Commands For Text393412
Node: Commands For Killing397061
Node: Numeric Arguments400094
Node: Commands For Completion401233
Node: Keyboard Macros405424
Node: Miscellaneous Commands406112
Node: Readline vi Mode412150
Node: Programmable Completion413057
Node: Programmable Completion Builtins420837
Node: A Programmable Completion Example431825
Node: Using History Interactively437073
Node: Bash History Facilities437757
Node: Bash History Builtins440762
Node: History Interaction445786
Node: Event Designators449406
Node: Word Designators450760
Node: Modifiers452520
Node: Installing Bash454328
Node: Basic Installation455465
Node: Compilers and Options459187
Node: Compiling For Multiple Architectures459928
Node: Installation Names461620
Node: Specifying the System Type463729
Node: Sharing Defaults464446
Node: Operation Controls465119
Node: Optional Features466077
Node: Reporting Bugs477296
Node: Major Differences From The Bourne Shell478630
Node: GNU Free Documentation License495479
Node: Indexes520656
Node: Builtin Index521110
Node: Reserved Word Index527937
Node: Variable Index530385
Node: Function Index547373
Node: Concept Index561157
Node: Top887
Node: Introduction2797
Node: What is Bash?3013
Node: What is a shell?4127
Node: Definitions6665
Node: Basic Shell Features9616
Node: Shell Syntax10835
Node: Shell Operation11861
Node: Quoting13154
Node: Escape Character14458
Node: Single Quotes14943
Node: Double Quotes15291
Node: ANSI-C Quoting16569
Node: Locale Translation17881
Node: Creating Internationalized Scripts19192
Node: Comments23309
Node: Shell Commands23927
Node: Reserved Words24865
Node: Simple Commands25621
Node: Pipelines26275
Node: Lists29274
Node: Compound Commands31069
Node: Looping Constructs32081
Node: Conditional Constructs34576
Node: Command Grouping49064
Node: Coprocesses50542
Node: GNU Parallel53205
Node: Shell Functions54122
Node: Shell Parameters62007
Node: Positional Parameters66395
Node: Special Parameters67297
Node: Shell Expansions70511
Node: Brace Expansion72638
Node: Tilde Expansion75372
Node: Shell Parameter Expansion77993
Node: Command Substitution96395
Node: Arithmetic Expansion99987
Node: Process Substitution100955
Node: Word Splitting102075
Node: Filename Expansion104123
Node: Pattern Matching107056
Node: Quote Removal112058
Node: Redirections112353
Node: Executing Commands122046
Node: Simple Command Expansion122716
Node: Command Search and Execution124826
Node: Command Execution Environment127213
Node: Environment130248
Node: Exit Status131911
Node: Signals133695
Node: Shell Scripts137144
Node: Shell Builtin Commands140171
Node: Bourne Shell Builtins142209
Node: Bash Builtins164408
Node: Modifying Shell Behavior196407
Node: The Set Builtin196752
Node: The Shopt Builtin207350
Node: Special Builtins223262
Node: Shell Variables224241
Node: Bourne Shell Variables224678
Node: Bash Variables226782
Node: Bash Features260847
Node: Invoking Bash261860
Node: Bash Startup Files267873
Node: Interactive Shells273004
Node: What is an Interactive Shell?273415
Node: Is this Shell Interactive?274064
Node: Interactive Shell Behavior274879
Node: Bash Conditional Expressions278508
Node: Shell Arithmetic283150
Node: Aliases286111
Node: Arrays289005
Node: The Directory Stack295568
Node: Directory Stack Builtins296352
Node: Controlling the Prompt300612
Node: The Restricted Shell303577
Node: Bash POSIX Mode306187
Node: Shell Compatibility Mode321980
Node: Job Control330224
Node: Job Control Basics330684
Node: Job Control Builtins335686
Node: Job Control Variables341481
Node: Command Line Editing342637
Node: Introduction and Notation344308
Node: Readline Interaction345931
Node: Readline Bare Essentials347122
Node: Readline Movement Commands348911
Node: Readline Killing Commands349871
Node: Readline Arguments351792
Node: Searching352836
Node: Readline Init File355022
Node: Readline Init File Syntax356283
Node: Conditional Init Constructs380074
Node: Sample Init File384270
Node: Bindable Readline Commands387394
Node: Commands For Moving388598
Node: Commands For History390649
Node: Commands For Text395643
Node: Commands For Killing399292
Node: Numeric Arguments402325
Node: Commands For Completion403464
Node: Keyboard Macros407655
Node: Miscellaneous Commands408343
Node: Readline vi Mode414381
Node: Programmable Completion415288
Node: Programmable Completion Builtins423068
Node: A Programmable Completion Example434056
Node: Using History Interactively439304
Node: Bash History Facilities439988
Node: Bash History Builtins442993
Node: History Interaction448017
Node: Event Designators451637
Node: Word Designators452991
Node: Modifiers454751
Node: Installing Bash456559
Node: Basic Installation457696
Node: Compilers and Options461418
Node: Compiling For Multiple Architectures462159
Node: Installation Names463851
Node: Specifying the System Type465960
Node: Sharing Defaults466677
Node: Operation Controls467350
Node: Optional Features468308
Node: Reporting Bugs479527
Node: Major Differences From The Bourne Shell480861
Node: GNU Free Documentation License497710
Node: Indexes522887
Node: Builtin Index523341
Node: Reserved Word Index530168
Node: Variable Index532616
Node: Function Index549604
Node: Concept Index563388

End Tag Table
+45 -69
View File
@@ -1,12 +1,12 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/MacPorts 2021.58693_0) (preloaded format=pdfetex 2021.8.30) 20 APR 2023 15:09
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/MacPorts 2021.58693_0) (preloaded format=etex 2021.8.30) 14 MAY 2023 15:39
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
%&-line parsing enabled.
**\input /usr/local/src/bash/bash-20230420/doc/bashref.texi \input /usr/local/s
rc/bash/bash-20230420/doc/bashref.texi
(/usr/local/src/bash/bash-20230420/doc/bashref.texi
(/usr/local/src/bash/bash-20230420/doc/texinfo.tex
**\nonstopmode \input /usr/local/src/bash/bash-20230509/doc/bashref.texi \input
/usr/local/src/bash/bash-20230509/doc/bashref.texi
(/usr/local/src/bash/bash-20230509/doc/bashref.texi
(/usr/local/src/bash/bash-20230509/doc/texinfo.tex
Loading texinfo [version 2015-11-22.14]:
\outerhsize=\dimen16
\outervsize=\dimen17
@@ -162,23 +162,20 @@ This is `epsf.tex' v2.7.4 <14 February 2011>
texinfo.tex: doing @include of version.texi
(/usr/local/src/bash/bash-20230420/doc/version.texi) [1{/opt/local/var/db/texmf
/fonts/map/pdftex/updmap/pdftex.map}] [2]
(/usr/local/build/bash/bash-20230420/doc/bashref.toc [-1] [-2] [-3]) [-4]
(/usr/local/build/bash/bash-20230420/doc/bashref.toc)
(/usr/local/build/bash/bash-20230420/doc/bashref.toc) Chapter 1
(/usr/local/src/bash/bash-20230509/doc/version.texi) [1] [2]
(/usr/local/build/bash/bash-20230509/doc/bashref.toc [-1] [-2] [-3]) [-4]
Chapter 1
\openout0 = `bashref.toc'.
(/usr/local/build/bash/bash-20230420/doc/bashref.aux)
(/usr/local/build/bash/bash-20230509/doc/bashref.aux)
\openout1 = `bashref.aux'.
Chapter 2 [1] [2]
Chapter 2
[1] [2]
@cpindfile=@write2
\openout2 = `bashref.cp'.
[3] Chapter 3 [4] [5] [6] [7]
[3] Chapter 3 [4] [5] [6] [7]
@vrindfile=@write3
\openout3 = `bashref.vr'.
@@ -223,13 +220,14 @@ Overfull \hbox (5.95723pt too wide) in paragraph at lines 724--725
[9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23]
[24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38]
[39] [40] [41] [42] [43] [44] [45] [46] Chapter 4 [47]
[39] [40] [41] [42] [43] [44] [45] [46] [47] Chapter 4 [48]
@btindfile=@write5
\openout5 = `bashref.bt'.
[48] [49] [50] [51]
[49] [50] [51]
[52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66]
Overfull \hbox (38.26585pt too wide) in paragraph at lines 5279--5279
[67]
Overfull \hbox (38.26585pt too wide) in paragraph at lines 5342--5342
[]@texttt set [-abefhkmnptuvxBCEHPT] [-o @textttsl option-name@texttt ] [--] [
-] [@textttsl ar-gu-ment []@texttt ][]
@@ -242,7 +240,7 @@ Overfull \hbox (38.26585pt too wide) in paragraph at lines 5279--5279
.etc.
Overfull \hbox (38.26585pt too wide) in paragraph at lines 5280--5280
Overfull \hbox (38.26585pt too wide) in paragraph at lines 5343--5343
[]@texttt set [+abefhkmnptuvxBCEHPT] [+o @textttsl option-name@texttt ] [--] [
-] [@textttsl ar-gu-ment []@texttt ][]
@@ -254,16 +252,16 @@ Overfull \hbox (38.26585pt too wide) in paragraph at lines 5280--5280
.@texttt t
.etc.
[67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] Chapter 5 [78] [79]
[80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] Chapter 6 [91] [92]
[93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106]
[107] [108] [109] [110] [111] [112] [113] [114] Chapter 7 [115] [116] [117]
[118]
[68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] Chapter 5 [79] [80]
[81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] Chapter 6 [92] [93]
[94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106]
[107] [108] [109] [110] [111] [112] [113] [114] [115] Chapter 7 [116] [117]
[118] [119]
texinfo.tex: doing @include of rluser.texi
(/usr/local/src/bash/bash-20230420/lib/readline/doc/rluser.texi
Chapter 8 [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129]
[130]
(/usr/local/src/bash/bash-20230509/lib/readline/doc/rluser.texi
Chapter 8 [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130]
[131]
Underfull \hbox (badness 7540) in paragraph at lines 874--880
[]@textrm In the ex-am-ple above, @textttsl C-u[] @textrm is bound to the func
-tion
@@ -289,7 +287,7 @@ e func-tion
.@texttt v
.etc.
[131] [132] [133]
[132] [133] [134]
Overfull \hbox (26.43913pt too wide) in paragraph at lines 1108--1108
[]@texttt Meta-Control-h: backward-kill-word Text after the function name is i
gnored[]
@@ -302,19 +300,19 @@ gnored[]
.@texttt t
.etc.
[134] [135]
[135] [136]
@fnindfile=@write6
\openout6 = `bashref.fn'.
[136] [137] [138] [139] [140] [141] [142] [143] [144] [145]
[146] [147] [148] [149] [150] [151] [152] [153])
[137] [138] [139] [140] [141] [142] [143] [144] [145] [146]
[147] [148] [149] [150] [151] [152] [153] [154])
texinfo.tex: doing @include of hsuser.texi
(/usr/local/src/bash/bash-20230420/lib/readline/doc/hsuser.texi Chapter 9
[154] [155] [156] [157] [158] [159]) Chapter 10 [160] [161] [162] [163]
[164]
Underfull \hbox (badness 10000) in paragraph at lines 9556--9565
(/usr/local/src/bash/bash-20230509/lib/readline/doc/hsuser.texi Chapter 9
[155] [156] [157] [158] [159] [160]) Chapter 10 [161] [162] [163] [164]
[165]
Underfull \hbox (badness 10000) in paragraph at lines 9622--9631
[]@textrm All of the fol-low-ing op-tions ex-cept for `@texttt alt-array-implem
entation[]@textrm '[],
@@ -327,7 +325,7 @@ entation[]@textrm '[],
.etc.
Underfull \hbox (badness 10000) in paragraph at lines 9556--9565
Underfull \hbox (badness 10000) in paragraph at lines 9622--9631
@textrm `@texttt disabled-builtins[]@textrm '[], `@texttt direxpand-default[]@t
extrm '[], `@texttt strict-posix-default[]@textrm '[], and
@@ -339,42 +337,20 @@ extrm '[], `@texttt strict-posix-default[]@textrm '[], and
.@texttt a
.etc.
[165] [166] [167] [168] Appendix A [169] Appendix B [170] [171] [172] [173]
[174] [175] Appendix C [176]
[166] [167] [168] [169] Appendix A [170] Appendix B [171] [172] [173] [174]
[175] [176] Appendix C [177]
texinfo.tex: doing @include of fdl.texi
(/usr/local/src/bash/bash-20230420/doc/fdl.texi
[177] [178] [179] [180] [181] [182] [183]) Appendix D [184] [185] [186]
[187] [188] [189] [190] [191] [192] [193] )
(/usr/local/src/bash/bash-20230509/doc/fdl.texi
[178] [179] [180] [181] [182] [183] [184]) Appendix D [185] [186] [187]
[188] [189] [190] [191] [192] [193] [194] )
Here is how much of TeX's memory you used:
4100 strings out of 497086
47602 string characters out of 6206517
142025 words of memory out of 5000000
4869 multiletter control sequences out of 15000+600000
3531 strings out of 497096
40273 string characters out of 6206923
87712 words of memory out of 5000000
4700 multiletter control sequences out of 15000+600000
34315 words of font info for 116 fonts, out of 8000000 for 9000
51 hyphenation exceptions out of 8191
16i,6n,16p,389b,983s stack positions out of 5000i,500n,10000p,200000b,80000s
{/opt/local/share/texmf-texlive/font
s/enc/dvips/cm-super/cm-super-t1.enc}</opt/local/share/texmf-texlive/fonts/type
1/public/amsfonts/cm/cmbx12.pfb></opt/local/share/texmf-texlive/fonts/type1/pub
lic/amsfonts/cm/cmcsc10.pfb></opt/local/share/texmf-texlive/fonts/type1/public/
amsfonts/cm/cmmi10.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfo
nts/cm/cmmi12.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/c
m/cmmi9.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr1
0.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr9.pfb><
/opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmsl10.pfb></opt/
local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmsltt10.pfb></opt/loc
al/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmsy10.pfb></opt/local/sh
are/texmf-texlive/fonts/type1/public/amsfonts/cm/cmti10.pfb></opt/local/share/t
exmf-texlive/fonts/type1/public/amsfonts/cm/cmtt10.pfb></opt/local/share/texmf-
texlive/fonts/type1/public/amsfonts/cm/cmtt12.pfb></opt/local/share/texmf-texli
ve/fonts/type1/public/amsfonts/cm/cmtt9.pfb></opt/local/share/texmf-texlive/fon
ts/type1/public/cm-super/sfrm1095.pfb></opt/local/share/texmf-texlive/fonts/typ
e1/public/cm-super/sfrm1440.pfb>
Output written on bashref.pdf (199 pages, 804832 bytes).
PDF statistics:
2794 PDF objects out of 2984 (max. 8388607)
2548 compressed objects within 26 object streams
327 named destinations out of 1000 (max. 500000)
1157 words of extra memory for PDF output out of 10000 (max. 10000000)
16i,6n,16p,402b,942s stack positions out of 5000i,500n,10000p,200000b,80000s
Output written on bashref.dvi (200 pages, 839672 bytes).
BIN
View File
Binary file not shown.
+72 -9
View File
@@ -2628,26 +2628,27 @@ expansion as described below.
Command substitution allows the output of a command to replace
the command itself.
Command substitution occurs when a command is enclosed as follows:
The standard form of command substitution occurs when a command is
enclosed as follows:
@example
$(@var{command})
@end example
@noindent
or
or (deprecated)
@example
`@var{command}`
`@var{command}`.
@end example
@noindent
Bash performs the expansion by executing @var{command} in a subshell environment
and replacing the command substitution with the standard output of the
command, with any trailing newlines deleted.
Bash performs the expansion by executing @var{command} in a subshell
environment and replacing the command substitution with the standard
output of the command, with any trailing newlines deleted.
Embedded newlines are not deleted, but they may be removed during
word splitting.
The command substitution @code{$(cat @var{file})} can be
replaced by the equivalent but faster @code{$(< @var{file})}.
When the old-style backquote form of substitution is used,
With the old-style backquote form of substitution,
backslash retains its literal meaning except when followed by
@samp{$}, @samp{`}, or @samp{\}.
The first backquote not preceded by a backslash terminates the
@@ -2655,11 +2656,73 @@ command substitution.
When using the @code{$(@var{command})} form, all characters between
the parentheses make up the command; none are treated specially.
There is an alternate form of command substitution:
@example
$@{@var{C} @var{command}; @}
@end example
@noindent
which executes @var{command} in the current execution environment.
This means that side effects of @var{command} take effect immediately
in the current execution environment and persist in the current
environment after the command completes (e.g., the @code{exit} builtin
will exit the shell).
The character @var{C} following the open brace must be a space, tab,
newline, @samp{(}, or @samp{|}, and the close brace must be in a position
where a reserved word may appear (i.e., preceded by a command terminator
such as semicolon).
Bash allows the close brace to be joined to the remaining characters in
the word without being followed by a shell metacharacter as a reserved
word would usually require.
This type of command substitution superficially resembles executing an
unnamed shell function: local variables are created as when a shell
function is executing, and the @code{return} builtin forces
@var{command} to complete;
however, the rest of the execution environment,
including the positional parameters, is shared with the caller.
If the first character following the open brace is a @samp{(},
@var{command} is executed in a subshell, and @var{command} must be
terminated by a @samp{)}. This is similar to the @code{(} compound
command (@pxref{Command Grouping}).
If the first character is a @samp{|}, the construct expands to the
value of the @code{REPLY} shell variable after @var{command} executes,
without removing any trailing newlines,
and the standard output of @var{command} remains the same as in the
calling shell.
Bash creates @code{REPLY} as an initially-unset local variable when
@var{command} executes, and restores @code{REPLY} to the value it had
before the command substitution after @var{command} completes,
as with any local variable.
For example, this construct expands to @samp{12345}, and leaves the
shell variable @code{X} unchanged in the current execution environment:
@example
$@{ local X=12345 ; echo $X; @}
@end example
@noindent
(not declaring @code{X} as local would modify its value in the current
environment, as with normal shell function execution),
while this construct does not require any output to expand to
@samp{12345}:
@example
$@{| REPLY=12345; @}
@end example
@noindent
and restores @code{REPLY} to the value it had before the command substitution.
Command substitutions may be nested. To nest when using the backquoted
form, escape the inner backquotes with backslashes.
If the substitution appears within double quotes, word splitting and
filename expansion are not performed on the results.
If the substitution appears within double quotes, Bash does not perform
word splitting and filename expansion on the results.
@node Arithmetic Expansion
@subsection Arithmetic Expansion
+104 -104
View File
@@ -32,112 +32,112 @@
@numsubsecentry{Tilde Expansion}{3.5.2}{Tilde Expansion}{25}
@numsubsecentry{Shell Parameter Expansion}{3.5.3}{Shell Parameter Expansion}{26}
@numsubsecentry{Command Substitution}{3.5.4}{Command Substitution}{34}
@numsubsecentry{Arithmetic Expansion}{3.5.5}{Arithmetic Expansion}{34}
@numsubsecentry{Arithmetic Expansion}{3.5.5}{Arithmetic Expansion}{35}
@numsubsecentry{Process Substitution}{3.5.6}{Process Substitution}{35}
@numsubsecentry{Word Splitting}{3.5.7}{Word Splitting}{35}
@numsubsecentry{Word Splitting}{3.5.7}{Word Splitting}{36}
@numsubsecentry{Filename Expansion}{3.5.8}{Filename Expansion}{36}
@numsubsubsecentry{Pattern Matching}{3.5.8.1}{Pattern Matching}{36}
@numsubsecentry{Quote Removal}{3.5.9}{Quote Removal}{38}
@numsecentry{Redirections}{3.6}{Redirections}{38}
@numsubsecentry{Redirecting Input}{3.6.1}{}{39}
@numsubsecentry{Redirecting Output}{3.6.2}{}{39}
@numsubsubsecentry{Pattern Matching}{3.5.8.1}{Pattern Matching}{37}
@numsubsecentry{Quote Removal}{3.5.9}{Quote Removal}{39}
@numsecentry{Redirections}{3.6}{Redirections}{39}
@numsubsecentry{Redirecting Input}{3.6.1}{}{40}
@numsubsecentry{Redirecting Output}{3.6.2}{}{40}
@numsubsecentry{Appending Redirected Output}{3.6.3}{}{40}
@numsubsecentry{Redirecting Standard Output and Standard Error}{3.6.4}{}{40}
@numsubsecentry{Appending Standard Output and Standard Error}{3.6.5}{}{40}
@numsubsecentry{Here Documents}{3.6.6}{}{40}
@numsubsecentry{Here Strings}{3.6.7}{}{41}
@numsubsecentry{Duplicating File Descriptors}{3.6.8}{}{41}
@numsubsecentry{Moving File Descriptors}{3.6.9}{}{41}
@numsubsecentry{Redirecting Standard Output and Standard Error}{3.6.4}{}{41}
@numsubsecentry{Appending Standard Output and Standard Error}{3.6.5}{}{41}
@numsubsecentry{Here Documents}{3.6.6}{}{41}
@numsubsecentry{Here Strings}{3.6.7}{}{42}
@numsubsecentry{Duplicating File Descriptors}{3.6.8}{}{42}
@numsubsecentry{Moving File Descriptors}{3.6.9}{}{42}
@numsubsecentry{Opening File Descriptors for Reading and Writing}{3.6.10}{}{42}
@numsecentry{Executing Commands}{3.7}{Executing Commands}{42}
@numsubsecentry{Simple Command Expansion}{3.7.1}{Simple Command Expansion}{42}
@numsubsecentry{Command Search and Execution}{3.7.2}{Command Search and Execution}{42}
@numsubsecentry{Command Execution Environment}{3.7.3}{Command Execution Environment}{43}
@numsubsecentry{Environment}{3.7.4}{Environment}{44}
@numsecentry{Executing Commands}{3.7}{Executing Commands}{43}
@numsubsecentry{Simple Command Expansion}{3.7.1}{Simple Command Expansion}{43}
@numsubsecentry{Command Search and Execution}{3.7.2}{Command Search and Execution}{43}
@numsubsecentry{Command Execution Environment}{3.7.3}{Command Execution Environment}{44}
@numsubsecentry{Environment}{3.7.4}{Environment}{45}
@numsubsecentry{Exit Status}{3.7.5}{Exit Status}{45}
@numsubsecentry{Signals}{3.7.6}{Signals}{45}
@numsecentry{Shell Scripts}{3.8}{Shell Scripts}{46}
@numchapentry{Shell Builtin Commands}{4}{Shell Builtin Commands}{48}
@numsecentry{Bourne Shell Builtins}{4.1}{Bourne Shell Builtins}{48}
@numsecentry{Bash Builtin Commands}{4.2}{Bash Builtins}{56}
@numsecentry{Modifying Shell Behavior}{4.3}{Modifying Shell Behavior}{67}
@numsubsecentry{The Set Builtin}{4.3.1}{The Set Builtin}{67}
@numsubsecentry{The Shopt Builtin}{4.3.2}{The Shopt Builtin}{71}
@numsecentry{Special Builtins}{4.4}{Special Builtins}{78}
@numchapentry{Shell Variables}{5}{Shell Variables}{79}
@numsecentry{Bourne Shell Variables}{5.1}{Bourne Shell Variables}{79}
@numsecentry{Bash Variables}{5.2}{Bash Variables}{79}
@numchapentry{Bash Features}{6}{Bash Features}{92}
@numsecentry{Invoking Bash}{6.1}{Invoking Bash}{92}
@numsecentry{Bash Startup Files}{6.2}{Bash Startup Files}{94}
@numsecentry{Interactive Shells}{6.3}{Interactive Shells}{95}
@numsubsecentry{What is an Interactive Shell?}{6.3.1}{What is an Interactive Shell?}{96}
@numsubsecentry{Is this Shell Interactive?}{6.3.2}{Is this Shell Interactive?}{96}
@numsubsecentry{Interactive Shell Behavior}{6.3.3}{Interactive Shell Behavior}{96}
@numsecentry{Bash Conditional Expressions}{6.4}{Bash Conditional Expressions}{97}
@numsecentry{Shell Arithmetic}{6.5}{Shell Arithmetic}{99}
@numsecentry{Aliases}{6.6}{Aliases}{101}
@numsecentry{Arrays}{6.7}{Arrays}{101}
@numsecentry{The Directory Stack}{6.8}{The Directory Stack}{103}
@numsubsecentry{Directory Stack Builtins}{6.8.1}{Directory Stack Builtins}{104}
@numsecentry{Controlling the Prompt}{6.9}{Controlling the Prompt}{105}
@numsecentry{The Restricted Shell}{6.10}{The Restricted Shell}{107}
@numsecentry{Bash and POSIX}{6.11}{Bash POSIX Mode}{107}
@numsubsecentry{What is POSIX?}{6.11.1}{}{107}
@numsubsecentry{Bash POSIX Mode}{6.11.2}{}{108}
@numsecentry{Shell Compatibility Mode}{6.12}{Shell Compatibility Mode}{112}
@numchapentry{Job Control}{7}{Job Control}{116}
@numsecentry{Job Control Basics}{7.1}{Job Control Basics}{116}
@numsecentry{Job Control Builtins}{7.2}{Job Control Builtins}{117}
@numsecentry{Job Control Variables}{7.3}{Job Control Variables}{119}
@numchapentry{Command Line Editing}{8}{Command Line Editing}{120}
@numsecentry{Introduction to Line Editing}{8.1}{Introduction and Notation}{120}
@numsecentry{Readline Interaction}{8.2}{Readline Interaction}{120}
@numsubsecentry{Readline Bare Essentials}{8.2.1}{Readline Bare Essentials}{121}
@numsubsecentry{Readline Movement Commands}{8.2.2}{Readline Movement Commands}{121}
@numsubsecentry{Readline Killing Commands}{8.2.3}{Readline Killing Commands}{122}
@numsubsecentry{Readline Arguments}{8.2.4}{Readline Arguments}{122}
@numsubsecentry{Searching for Commands in the History}{8.2.5}{Searching}{122}
@numsecentry{Readline Init File}{8.3}{Readline Init File}{123}
@numsubsecentry{Readline Init File Syntax}{8.3.1}{Readline Init File Syntax}{123}
@numsubsecentry{Conditional Init Constructs}{8.3.2}{Conditional Init Constructs}{132}
@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{133}
@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{136}
@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{136}
@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{137}
@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{139}
@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{140}
@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{141}
@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{142}
@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{143}
@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{144}
@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{146}
@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{146}
@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{149}
@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{153}
@numchapentry{Using History Interactively}{9}{Using History Interactively}{155}
@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{155}
@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{155}
@numsecentry{History Expansion}{9.3}{History Interaction}{157}
@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{158}
@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{159}
@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{159}
@numchapentry{Installing Bash}{10}{Installing Bash}{161}
@numsecentry{Basic Installation}{10.1}{Basic Installation}{161}
@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{162}
@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{162}
@numsecentry{Installation Names}{10.4}{Installation Names}{163}
@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{163}
@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{163}
@numsecentry{Operation Controls}{10.7}{Operation Controls}{164}
@numsecentry{Optional Features}{10.8}{Optional Features}{164}
@appentry{Reporting Bugs}{A}{Reporting Bugs}{170}
@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{171}
@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{175}
@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{177}
@appentry{Indexes}{D}{Indexes}{185}
@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{185}
@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{186}
@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{187}
@appsecentry{Function Index}{D.4}{Function Index}{189}
@appsecentry{Concept Index}{D.5}{Concept Index}{191}
@numsubsecentry{Signals}{3.7.6}{Signals}{46}
@numsecentry{Shell Scripts}{3.8}{Shell Scripts}{47}
@numchapentry{Shell Builtin Commands}{4}{Shell Builtin Commands}{49}
@numsecentry{Bourne Shell Builtins}{4.1}{Bourne Shell Builtins}{49}
@numsecentry{Bash Builtin Commands}{4.2}{Bash Builtins}{57}
@numsecentry{Modifying Shell Behavior}{4.3}{Modifying Shell Behavior}{68}
@numsubsecentry{The Set Builtin}{4.3.1}{The Set Builtin}{68}
@numsubsecentry{The Shopt Builtin}{4.3.2}{The Shopt Builtin}{72}
@numsecentry{Special Builtins}{4.4}{Special Builtins}{79}
@numchapentry{Shell Variables}{5}{Shell Variables}{80}
@numsecentry{Bourne Shell Variables}{5.1}{Bourne Shell Variables}{80}
@numsecentry{Bash Variables}{5.2}{Bash Variables}{80}
@numchapentry{Bash Features}{6}{Bash Features}{93}
@numsecentry{Invoking Bash}{6.1}{Invoking Bash}{93}
@numsecentry{Bash Startup Files}{6.2}{Bash Startup Files}{95}
@numsecentry{Interactive Shells}{6.3}{Interactive Shells}{96}
@numsubsecentry{What is an Interactive Shell?}{6.3.1}{What is an Interactive Shell?}{97}
@numsubsecentry{Is this Shell Interactive?}{6.3.2}{Is this Shell Interactive?}{97}
@numsubsecentry{Interactive Shell Behavior}{6.3.3}{Interactive Shell Behavior}{97}
@numsecentry{Bash Conditional Expressions}{6.4}{Bash Conditional Expressions}{98}
@numsecentry{Shell Arithmetic}{6.5}{Shell Arithmetic}{100}
@numsecentry{Aliases}{6.6}{Aliases}{102}
@numsecentry{Arrays}{6.7}{Arrays}{102}
@numsecentry{The Directory Stack}{6.8}{The Directory Stack}{104}
@numsubsecentry{Directory Stack Builtins}{6.8.1}{Directory Stack Builtins}{105}
@numsecentry{Controlling the Prompt}{6.9}{Controlling the Prompt}{106}
@numsecentry{The Restricted Shell}{6.10}{The Restricted Shell}{108}
@numsecentry{Bash and POSIX}{6.11}{Bash POSIX Mode}{108}
@numsubsecentry{What is POSIX?}{6.11.1}{}{108}
@numsubsecentry{Bash POSIX Mode}{6.11.2}{}{109}
@numsecentry{Shell Compatibility Mode}{6.12}{Shell Compatibility Mode}{113}
@numchapentry{Job Control}{7}{Job Control}{117}
@numsecentry{Job Control Basics}{7.1}{Job Control Basics}{117}
@numsecentry{Job Control Builtins}{7.2}{Job Control Builtins}{118}
@numsecentry{Job Control Variables}{7.3}{Job Control Variables}{120}
@numchapentry{Command Line Editing}{8}{Command Line Editing}{121}
@numsecentry{Introduction to Line Editing}{8.1}{Introduction and Notation}{121}
@numsecentry{Readline Interaction}{8.2}{Readline Interaction}{121}
@numsubsecentry{Readline Bare Essentials}{8.2.1}{Readline Bare Essentials}{122}
@numsubsecentry{Readline Movement Commands}{8.2.2}{Readline Movement Commands}{122}
@numsubsecentry{Readline Killing Commands}{8.2.3}{Readline Killing Commands}{123}
@numsubsecentry{Readline Arguments}{8.2.4}{Readline Arguments}{123}
@numsubsecentry{Searching for Commands in the History}{8.2.5}{Searching}{123}
@numsecentry{Readline Init File}{8.3}{Readline Init File}{124}
@numsubsecentry{Readline Init File Syntax}{8.3.1}{Readline Init File Syntax}{124}
@numsubsecentry{Conditional Init Constructs}{8.3.2}{Conditional Init Constructs}{133}
@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{134}
@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{137}
@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{137}
@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{138}
@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{140}
@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{141}
@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{142}
@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{143}
@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{144}
@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{145}
@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{147}
@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{147}
@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{150}
@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{154}
@numchapentry{Using History Interactively}{9}{Using History Interactively}{156}
@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{156}
@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{156}
@numsecentry{History Expansion}{9.3}{History Interaction}{158}
@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{159}
@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{160}
@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{160}
@numchapentry{Installing Bash}{10}{Installing Bash}{162}
@numsecentry{Basic Installation}{10.1}{Basic Installation}{162}
@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{163}
@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{163}
@numsecentry{Installation Names}{10.4}{Installation Names}{164}
@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{164}
@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{164}
@numsecentry{Operation Controls}{10.7}{Operation Controls}{165}
@numsecentry{Optional Features}{10.8}{Optional Features}{165}
@appentry{Reporting Bugs}{A}{Reporting Bugs}{171}
@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{172}
@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{176}
@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{178}
@appentry{Indexes}{D}{Indexes}{186}
@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{186}
@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{187}
@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{188}
@appsecentry{Function Index}{D.4}{Function Index}{190}
@appsecentry{Concept Index}{D.5}{Concept Index}{192}
+155 -155
View File
@@ -18,158 +18,158 @@
\entry{$!}{24}{\code {$!}}
\entry{0}{24}{\code {0}}
\entry{$0}{24}{\code {$0}}
\entry{CDPATH}{79}{\code {CDPATH}}
\entry{HOME}{79}{\code {HOME}}
\entry{IFS}{79}{\code {IFS}}
\entry{MAIL}{79}{\code {MAIL}}
\entry{MAILPATH}{79}{\code {MAILPATH}}
\entry{OPTARG}{79}{\code {OPTARG}}
\entry{OPTIND}{79}{\code {OPTIND}}
\entry{PATH}{79}{\code {PATH}}
\entry{PS1}{79}{\code {PS1}}
\entry{PS2}{79}{\code {PS2}}
\entry{_}{79}{\code {_}}
\entry{$_}{79}{\code {$_}}
\entry{BASH}{80}{\code {BASH}}
\entry{BASHOPTS}{80}{\code {BASHOPTS}}
\entry{BASHPID}{80}{\code {BASHPID}}
\entry{BASH_ALIASES}{80}{\code {BASH_ALIASES}}
\entry{BASH_ARGC}{80}{\code {BASH_ARGC}}
\entry{BASH_ARGV}{80}{\code {BASH_ARGV}}
\entry{BASH_ARGV0}{81}{\code {BASH_ARGV0}}
\entry{BASH_CMDS}{81}{\code {BASH_CMDS}}
\entry{BASH_COMMAND}{81}{\code {BASH_COMMAND}}
\entry{BASH_COMPAT}{81}{\code {BASH_COMPAT}}
\entry{BASH_ENV}{81}{\code {BASH_ENV}}
\entry{BASH_EXECUTION_STRING}{81}{\code {BASH_EXECUTION_STRING}}
\entry{BASH_LINENO}{81}{\code {BASH_LINENO}}
\entry{BASH_LOADABLES_PATH}{82}{\code {BASH_LOADABLES_PATH}}
\entry{BASH_REMATCH}{82}{\code {BASH_REMATCH}}
\entry{BASH_SOURCE}{82}{\code {BASH_SOURCE}}
\entry{BASH_SUBSHELL}{82}{\code {BASH_SUBSHELL}}
\entry{BASH_VERSINFO}{82}{\code {BASH_VERSINFO}}
\entry{BASH_VERSION}{82}{\code {BASH_VERSION}}
\entry{BASH_XTRACEFD}{82}{\code {BASH_XTRACEFD}}
\entry{CHILD_MAX}{83}{\code {CHILD_MAX}}
\entry{COLUMNS}{83}{\code {COLUMNS}}
\entry{COMP_CWORD}{83}{\code {COMP_CWORD}}
\entry{COMP_LINE}{83}{\code {COMP_LINE}}
\entry{COMP_POINT}{83}{\code {COMP_POINT}}
\entry{COMP_TYPE}{83}{\code {COMP_TYPE}}
\entry{COMP_KEY}{83}{\code {COMP_KEY}}
\entry{COMP_WORDBREAKS}{83}{\code {COMP_WORDBREAKS}}
\entry{COMP_WORDS}{83}{\code {COMP_WORDS}}
\entry{COMPREPLY}{84}{\code {COMPREPLY}}
\entry{COPROC}{84}{\code {COPROC}}
\entry{DIRSTACK}{84}{\code {DIRSTACK}}
\entry{EMACS}{84}{\code {EMACS}}
\entry{ENV}{84}{\code {ENV}}
\entry{EPOCHREALTIME}{84}{\code {EPOCHREALTIME}}
\entry{EPOCHSECONDS}{84}{\code {EPOCHSECONDS}}
\entry{EUID}{84}{\code {EUID}}
\entry{EXECIGNORE}{84}{\code {EXECIGNORE}}
\entry{FCEDIT}{85}{\code {FCEDIT}}
\entry{FIGNORE}{85}{\code {FIGNORE}}
\entry{FUNCNAME}{85}{\code {FUNCNAME}}
\entry{FUNCNEST}{85}{\code {FUNCNEST}}
\entry{GLOBIGNORE}{85}{\code {GLOBIGNORE}}
\entry{GLOBSORT}{85}{\code {GLOBSORT}}
\entry{GROUPS}{85}{\code {GROUPS}}
\entry{histchars}{86}{\code {histchars}}
\entry{HISTCMD}{86}{\code {HISTCMD}}
\entry{HISTCONTROL}{86}{\code {HISTCONTROL}}
\entry{HISTFILE}{86}{\code {HISTFILE}}
\entry{HISTFILESIZE}{86}{\code {HISTFILESIZE}}
\entry{HISTIGNORE}{86}{\code {HISTIGNORE}}
\entry{HISTSIZE}{87}{\code {HISTSIZE}}
\entry{HISTTIMEFORMAT}{87}{\code {HISTTIMEFORMAT}}
\entry{HOSTFILE}{87}{\code {HOSTFILE}}
\entry{HOSTNAME}{87}{\code {HOSTNAME}}
\entry{HOSTTYPE}{87}{\code {HOSTTYPE}}
\entry{IGNOREEOF}{87}{\code {IGNOREEOF}}
\entry{INPUTRC}{87}{\code {INPUTRC}}
\entry{INSIDE_EMACS}{87}{\code {INSIDE_EMACS}}
\entry{LANG}{87}{\code {LANG}}
\entry{LC_ALL}{88}{\code {LC_ALL}}
\entry{LC_COLLATE}{88}{\code {LC_COLLATE}}
\entry{LC_CTYPE}{88}{\code {LC_CTYPE}}
\entry{LC_MESSAGES}{88}{\code {LC_MESSAGES}}
\entry{LC_NUMERIC}{88}{\code {LC_NUMERIC}}
\entry{LC_TIME}{88}{\code {LC_TIME}}
\entry{LINENO}{88}{\code {LINENO}}
\entry{LINES}{88}{\code {LINES}}
\entry{MACHTYPE}{88}{\code {MACHTYPE}}
\entry{MAILCHECK}{88}{\code {MAILCHECK}}
\entry{MAPFILE}{88}{\code {MAPFILE}}
\entry{OLDPWD}{88}{\code {OLDPWD}}
\entry{OPTERR}{88}{\code {OPTERR}}
\entry{OSTYPE}{88}{\code {OSTYPE}}
\entry{PIPESTATUS}{88}{\code {PIPESTATUS}}
\entry{POSIXLY_CORRECT}{89}{\code {POSIXLY_CORRECT}}
\entry{PPID}{89}{\code {PPID}}
\entry{PROMPT_COMMAND}{89}{\code {PROMPT_COMMAND}}
\entry{PROMPT_DIRTRIM}{89}{\code {PROMPT_DIRTRIM}}
\entry{PS0}{89}{\code {PS0}}
\entry{PS3}{89}{\code {PS3}}
\entry{PS4}{89}{\code {PS4}}
\entry{PWD}{89}{\code {PWD}}
\entry{RANDOM}{89}{\code {RANDOM}}
\entry{READLINE_ARGUMENT}{89}{\code {READLINE_ARGUMENT}}
\entry{READLINE_LINE}{89}{\code {READLINE_LINE}}
\entry{READLINE_MARK}{89}{\code {READLINE_MARK}}
\entry{READLINE_POINT}{90}{\code {READLINE_POINT}}
\entry{REPLY}{90}{\code {REPLY}}
\entry{SECONDS}{90}{\code {SECONDS}}
\entry{SHELL}{90}{\code {SHELL}}
\entry{SHELLOPTS}{90}{\code {SHELLOPTS}}
\entry{SHLVL}{90}{\code {SHLVL}}
\entry{SRANDOM}{90}{\code {SRANDOM}}
\entry{TIMEFORMAT}{90}{\code {TIMEFORMAT}}
\entry{TMOUT}{91}{\code {TMOUT}}
\entry{TMPDIR}{91}{\code {TMPDIR}}
\entry{UID}{91}{\code {UID}}
\entry{auto_resume}{119}{\code {auto_resume}}
\entry{active-region-start-color}{124}{\code {active-region-start-color}}
\entry{active-region-end-color}{124}{\code {active-region-end-color}}
\entry{bell-style}{124}{\code {bell-style}}
\entry{bind-tty-special-chars}{124}{\code {bind-tty-special-chars}}
\entry{blink-matching-paren}{125}{\code {blink-matching-paren}}
\entry{colored-completion-prefix}{125}{\code {colored-completion-prefix}}
\entry{colored-stats}{125}{\code {colored-stats}}
\entry{comment-begin}{125}{\code {comment-begin}}
\entry{completion-display-width}{125}{\code {completion-display-width}}
\entry{completion-ignore-case}{125}{\code {completion-ignore-case}}
\entry{completion-map-case}{125}{\code {completion-map-case}}
\entry{completion-prefix-display-length}{125}{\code {completion-prefix-display-length}}
\entry{completion-query-items}{125}{\code {completion-query-items}}
\entry{convert-meta}{126}{\code {convert-meta}}
\entry{disable-completion}{126}{\code {disable-completion}}
\entry{echo-control-characters}{126}{\code {echo-control-characters}}
\entry{editing-mode}{126}{\code {editing-mode}}
\entry{emacs-mode-string}{126}{\code {emacs-mode-string}}
\entry{enable-active-region}{126}{\code {enable-active-region}}
\entry{enable-bracketed-paste}{127}{\code {enable-bracketed-paste}}
\entry{enable-keypad}{127}{\code {enable-keypad}}
\entry{expand-tilde}{127}{\code {expand-tilde}}
\entry{history-preserve-point}{127}{\code {history-preserve-point}}
\entry{history-size}{127}{\code {history-size}}
\entry{horizontal-scroll-mode}{127}{\code {horizontal-scroll-mode}}
\entry{input-meta}{127}{\code {input-meta}}
\entry{meta-flag}{127}{\code {meta-flag}}
\entry{isearch-terminators}{128}{\code {isearch-terminators}}
\entry{keymap}{128}{\code {keymap}}
\entry{mark-modified-lines}{128}{\code {mark-modified-lines}}
\entry{mark-symlinked-directories}{128}{\code {mark-symlinked-directories}}
\entry{match-hidden-files}{128}{\code {match-hidden-files}}
\entry{menu-complete-display-prefix}{129}{\code {menu-complete-display-prefix}}
\entry{output-meta}{129}{\code {output-meta}}
\entry{page-completions}{129}{\code {page-completions}}
\entry{revert-all-at-newline}{129}{\code {revert-all-at-newline}}
\entry{search-ignore-case}{129}{\code {search-ignore-case}}
\entry{show-all-if-ambiguous}{129}{\code {show-all-if-ambiguous}}
\entry{show-all-if-unmodified}{129}{\code {show-all-if-unmodified}}
\entry{show-mode-in-prompt}{129}{\code {show-mode-in-prompt}}
\entry{skip-completed-text}{130}{\code {skip-completed-text}}
\entry{vi-cmd-mode-string}{130}{\code {vi-cmd-mode-string}}
\entry{vi-ins-mode-string}{130}{\code {vi-ins-mode-string}}
\entry{visible-stats}{130}{\code {visible-stats}}
\entry{CDPATH}{80}{\code {CDPATH}}
\entry{HOME}{80}{\code {HOME}}
\entry{IFS}{80}{\code {IFS}}
\entry{MAIL}{80}{\code {MAIL}}
\entry{MAILPATH}{80}{\code {MAILPATH}}
\entry{OPTARG}{80}{\code {OPTARG}}
\entry{OPTIND}{80}{\code {OPTIND}}
\entry{PATH}{80}{\code {PATH}}
\entry{PS1}{80}{\code {PS1}}
\entry{PS2}{80}{\code {PS2}}
\entry{_}{80}{\code {_}}
\entry{$_}{80}{\code {$_}}
\entry{BASH}{81}{\code {BASH}}
\entry{BASHOPTS}{81}{\code {BASHOPTS}}
\entry{BASHPID}{81}{\code {BASHPID}}
\entry{BASH_ALIASES}{81}{\code {BASH_ALIASES}}
\entry{BASH_ARGC}{81}{\code {BASH_ARGC}}
\entry{BASH_ARGV}{81}{\code {BASH_ARGV}}
\entry{BASH_ARGV0}{82}{\code {BASH_ARGV0}}
\entry{BASH_CMDS}{82}{\code {BASH_CMDS}}
\entry{BASH_COMMAND}{82}{\code {BASH_COMMAND}}
\entry{BASH_COMPAT}{82}{\code {BASH_COMPAT}}
\entry{BASH_ENV}{82}{\code {BASH_ENV}}
\entry{BASH_EXECUTION_STRING}{82}{\code {BASH_EXECUTION_STRING}}
\entry{BASH_LINENO}{82}{\code {BASH_LINENO}}
\entry{BASH_LOADABLES_PATH}{83}{\code {BASH_LOADABLES_PATH}}
\entry{BASH_REMATCH}{83}{\code {BASH_REMATCH}}
\entry{BASH_SOURCE}{83}{\code {BASH_SOURCE}}
\entry{BASH_SUBSHELL}{83}{\code {BASH_SUBSHELL}}
\entry{BASH_VERSINFO}{83}{\code {BASH_VERSINFO}}
\entry{BASH_VERSION}{83}{\code {BASH_VERSION}}
\entry{BASH_XTRACEFD}{83}{\code {BASH_XTRACEFD}}
\entry{CHILD_MAX}{84}{\code {CHILD_MAX}}
\entry{COLUMNS}{84}{\code {COLUMNS}}
\entry{COMP_CWORD}{84}{\code {COMP_CWORD}}
\entry{COMP_LINE}{84}{\code {COMP_LINE}}
\entry{COMP_POINT}{84}{\code {COMP_POINT}}
\entry{COMP_TYPE}{84}{\code {COMP_TYPE}}
\entry{COMP_KEY}{84}{\code {COMP_KEY}}
\entry{COMP_WORDBREAKS}{84}{\code {COMP_WORDBREAKS}}
\entry{COMP_WORDS}{84}{\code {COMP_WORDS}}
\entry{COMPREPLY}{85}{\code {COMPREPLY}}
\entry{COPROC}{85}{\code {COPROC}}
\entry{DIRSTACK}{85}{\code {DIRSTACK}}
\entry{EMACS}{85}{\code {EMACS}}
\entry{ENV}{85}{\code {ENV}}
\entry{EPOCHREALTIME}{85}{\code {EPOCHREALTIME}}
\entry{EPOCHSECONDS}{85}{\code {EPOCHSECONDS}}
\entry{EUID}{85}{\code {EUID}}
\entry{EXECIGNORE}{85}{\code {EXECIGNORE}}
\entry{FCEDIT}{86}{\code {FCEDIT}}
\entry{FIGNORE}{86}{\code {FIGNORE}}
\entry{FUNCNAME}{86}{\code {FUNCNAME}}
\entry{FUNCNEST}{86}{\code {FUNCNEST}}
\entry{GLOBIGNORE}{86}{\code {GLOBIGNORE}}
\entry{GLOBSORT}{86}{\code {GLOBSORT}}
\entry{GROUPS}{87}{\code {GROUPS}}
\entry{histchars}{87}{\code {histchars}}
\entry{HISTCMD}{87}{\code {HISTCMD}}
\entry{HISTCONTROL}{87}{\code {HISTCONTROL}}
\entry{HISTFILE}{87}{\code {HISTFILE}}
\entry{HISTFILESIZE}{87}{\code {HISTFILESIZE}}
\entry{HISTIGNORE}{87}{\code {HISTIGNORE}}
\entry{HISTSIZE}{88}{\code {HISTSIZE}}
\entry{HISTTIMEFORMAT}{88}{\code {HISTTIMEFORMAT}}
\entry{HOSTFILE}{88}{\code {HOSTFILE}}
\entry{HOSTNAME}{88}{\code {HOSTNAME}}
\entry{HOSTTYPE}{88}{\code {HOSTTYPE}}
\entry{IGNOREEOF}{88}{\code {IGNOREEOF}}
\entry{INPUTRC}{88}{\code {INPUTRC}}
\entry{INSIDE_EMACS}{88}{\code {INSIDE_EMACS}}
\entry{LANG}{89}{\code {LANG}}
\entry{LC_ALL}{89}{\code {LC_ALL}}
\entry{LC_COLLATE}{89}{\code {LC_COLLATE}}
\entry{LC_CTYPE}{89}{\code {LC_CTYPE}}
\entry{LC_MESSAGES}{89}{\code {LC_MESSAGES}}
\entry{LC_NUMERIC}{89}{\code {LC_NUMERIC}}
\entry{LC_TIME}{89}{\code {LC_TIME}}
\entry{LINENO}{89}{\code {LINENO}}
\entry{LINES}{89}{\code {LINES}}
\entry{MACHTYPE}{89}{\code {MACHTYPE}}
\entry{MAILCHECK}{89}{\code {MAILCHECK}}
\entry{MAPFILE}{89}{\code {MAPFILE}}
\entry{OLDPWD}{89}{\code {OLDPWD}}
\entry{OPTERR}{89}{\code {OPTERR}}
\entry{OSTYPE}{89}{\code {OSTYPE}}
\entry{PIPESTATUS}{89}{\code {PIPESTATUS}}
\entry{POSIXLY_CORRECT}{90}{\code {POSIXLY_CORRECT}}
\entry{PPID}{90}{\code {PPID}}
\entry{PROMPT_COMMAND}{90}{\code {PROMPT_COMMAND}}
\entry{PROMPT_DIRTRIM}{90}{\code {PROMPT_DIRTRIM}}
\entry{PS0}{90}{\code {PS0}}
\entry{PS3}{90}{\code {PS3}}
\entry{PS4}{90}{\code {PS4}}
\entry{PWD}{90}{\code {PWD}}
\entry{RANDOM}{90}{\code {RANDOM}}
\entry{READLINE_ARGUMENT}{90}{\code {READLINE_ARGUMENT}}
\entry{READLINE_LINE}{90}{\code {READLINE_LINE}}
\entry{READLINE_MARK}{90}{\code {READLINE_MARK}}
\entry{READLINE_POINT}{91}{\code {READLINE_POINT}}
\entry{REPLY}{91}{\code {REPLY}}
\entry{SECONDS}{91}{\code {SECONDS}}
\entry{SHELL}{91}{\code {SHELL}}
\entry{SHELLOPTS}{91}{\code {SHELLOPTS}}
\entry{SHLVL}{91}{\code {SHLVL}}
\entry{SRANDOM}{91}{\code {SRANDOM}}
\entry{TIMEFORMAT}{91}{\code {TIMEFORMAT}}
\entry{TMOUT}{92}{\code {TMOUT}}
\entry{TMPDIR}{92}{\code {TMPDIR}}
\entry{UID}{92}{\code {UID}}
\entry{auto_resume}{120}{\code {auto_resume}}
\entry{active-region-start-color}{125}{\code {active-region-start-color}}
\entry{active-region-end-color}{125}{\code {active-region-end-color}}
\entry{bell-style}{125}{\code {bell-style}}
\entry{bind-tty-special-chars}{125}{\code {bind-tty-special-chars}}
\entry{blink-matching-paren}{126}{\code {blink-matching-paren}}
\entry{colored-completion-prefix}{126}{\code {colored-completion-prefix}}
\entry{colored-stats}{126}{\code {colored-stats}}
\entry{comment-begin}{126}{\code {comment-begin}}
\entry{completion-display-width}{126}{\code {completion-display-width}}
\entry{completion-ignore-case}{126}{\code {completion-ignore-case}}
\entry{completion-map-case}{126}{\code {completion-map-case}}
\entry{completion-prefix-display-length}{126}{\code {completion-prefix-display-length}}
\entry{completion-query-items}{126}{\code {completion-query-items}}
\entry{convert-meta}{127}{\code {convert-meta}}
\entry{disable-completion}{127}{\code {disable-completion}}
\entry{echo-control-characters}{127}{\code {echo-control-characters}}
\entry{editing-mode}{127}{\code {editing-mode}}
\entry{emacs-mode-string}{127}{\code {emacs-mode-string}}
\entry{enable-active-region}{127}{\code {enable-active-region}}
\entry{enable-bracketed-paste}{128}{\code {enable-bracketed-paste}}
\entry{enable-keypad}{128}{\code {enable-keypad}}
\entry{expand-tilde}{128}{\code {expand-tilde}}
\entry{history-preserve-point}{128}{\code {history-preserve-point}}
\entry{history-size}{128}{\code {history-size}}
\entry{horizontal-scroll-mode}{128}{\code {horizontal-scroll-mode}}
\entry{input-meta}{128}{\code {input-meta}}
\entry{meta-flag}{128}{\code {meta-flag}}
\entry{isearch-terminators}{129}{\code {isearch-terminators}}
\entry{keymap}{129}{\code {keymap}}
\entry{mark-modified-lines}{129}{\code {mark-modified-lines}}
\entry{mark-symlinked-directories}{129}{\code {mark-symlinked-directories}}
\entry{match-hidden-files}{129}{\code {match-hidden-files}}
\entry{menu-complete-display-prefix}{130}{\code {menu-complete-display-prefix}}
\entry{output-meta}{130}{\code {output-meta}}
\entry{page-completions}{130}{\code {page-completions}}
\entry{revert-all-at-newline}{130}{\code {revert-all-at-newline}}
\entry{search-ignore-case}{130}{\code {search-ignore-case}}
\entry{show-all-if-ambiguous}{130}{\code {show-all-if-ambiguous}}
\entry{show-all-if-unmodified}{130}{\code {show-all-if-unmodified}}
\entry{show-mode-in-prompt}{130}{\code {show-mode-in-prompt}}
\entry{skip-completed-text}{131}{\code {skip-completed-text}}
\entry{vi-cmd-mode-string}{131}{\code {vi-cmd-mode-string}}
\entry{vi-ins-mode-string}{131}{\code {vi-ins-mode-string}}
\entry{visible-stats}{131}{\code {visible-stats}}
+155 -155
View File
@@ -11,7 +11,7 @@
\entry{\code {$-}}{23}
\entry{\code {$?}}{23}
\entry{\code {$@}}{23}
\entry{\code {$_}}{79}
\entry{\code {$_}}{80}
\entry{\code {$0}}{24}
\initial {*}
\entry{\code {*}}{23}
@@ -22,180 +22,180 @@
\initial {@}
\entry{\code {@}}{23}
\initial {_}
\entry{\code {_}}{79}
\entry{\code {_}}{80}
\initial {0}
\entry{\code {0}}{24}
\initial {A}
\entry{\code {active-region-end-color}}{124}
\entry{\code {active-region-start-color}}{124}
\entry{\code {auto_resume}}{119}
\entry{\code {active-region-end-color}}{125}
\entry{\code {active-region-start-color}}{125}
\entry{\code {auto_resume}}{120}
\initial {B}
\entry{\code {BASH}}{80}
\entry{\code {BASH_ALIASES}}{80}
\entry{\code {BASH_ARGC}}{80}
\entry{\code {BASH_ARGV}}{80}
\entry{\code {BASH_ARGV0}}{81}
\entry{\code {BASH_CMDS}}{81}
\entry{\code {BASH_COMMAND}}{81}
\entry{\code {BASH_COMPAT}}{81}
\entry{\code {BASH_ENV}}{81}
\entry{\code {BASH_EXECUTION_STRING}}{81}
\entry{\code {BASH_LINENO}}{81}
\entry{\code {BASH_LOADABLES_PATH}}{82}
\entry{\code {BASH_REMATCH}}{82}
\entry{\code {BASH_SOURCE}}{82}
\entry{\code {BASH_SUBSHELL}}{82}
\entry{\code {BASH_VERSINFO}}{82}
\entry{\code {BASH_VERSION}}{82}
\entry{\code {BASH_XTRACEFD}}{82}
\entry{\code {BASHOPTS}}{80}
\entry{\code {BASHPID}}{80}
\entry{\code {bell-style}}{124}
\entry{\code {bind-tty-special-chars}}{124}
\entry{\code {blink-matching-paren}}{125}
\entry{\code {BASH}}{81}
\entry{\code {BASH_ALIASES}}{81}
\entry{\code {BASH_ARGC}}{81}
\entry{\code {BASH_ARGV}}{81}
\entry{\code {BASH_ARGV0}}{82}
\entry{\code {BASH_CMDS}}{82}
\entry{\code {BASH_COMMAND}}{82}
\entry{\code {BASH_COMPAT}}{82}
\entry{\code {BASH_ENV}}{82}
\entry{\code {BASH_EXECUTION_STRING}}{82}
\entry{\code {BASH_LINENO}}{82}
\entry{\code {BASH_LOADABLES_PATH}}{83}
\entry{\code {BASH_REMATCH}}{83}
\entry{\code {BASH_SOURCE}}{83}
\entry{\code {BASH_SUBSHELL}}{83}
\entry{\code {BASH_VERSINFO}}{83}
\entry{\code {BASH_VERSION}}{83}
\entry{\code {BASH_XTRACEFD}}{83}
\entry{\code {BASHOPTS}}{81}
\entry{\code {BASHPID}}{81}
\entry{\code {bell-style}}{125}
\entry{\code {bind-tty-special-chars}}{125}
\entry{\code {blink-matching-paren}}{126}
\initial {C}
\entry{\code {CDPATH}}{79}
\entry{\code {CHILD_MAX}}{83}
\entry{\code {colored-completion-prefix}}{125}
\entry{\code {colored-stats}}{125}
\entry{\code {COLUMNS}}{83}
\entry{\code {comment-begin}}{125}
\entry{\code {COMP_CWORD}}{83}
\entry{\code {COMP_KEY}}{83}
\entry{\code {COMP_LINE}}{83}
\entry{\code {COMP_POINT}}{83}
\entry{\code {COMP_TYPE}}{83}
\entry{\code {COMP_WORDBREAKS}}{83}
\entry{\code {COMP_WORDS}}{83}
\entry{\code {completion-display-width}}{125}
\entry{\code {completion-ignore-case}}{125}
\entry{\code {completion-map-case}}{125}
\entry{\code {completion-prefix-display-length}}{125}
\entry{\code {completion-query-items}}{125}
\entry{\code {COMPREPLY}}{84}
\entry{\code {convert-meta}}{126}
\entry{\code {COPROC}}{84}
\entry{\code {CDPATH}}{80}
\entry{\code {CHILD_MAX}}{84}
\entry{\code {colored-completion-prefix}}{126}
\entry{\code {colored-stats}}{126}
\entry{\code {COLUMNS}}{84}
\entry{\code {comment-begin}}{126}
\entry{\code {COMP_CWORD}}{84}
\entry{\code {COMP_KEY}}{84}
\entry{\code {COMP_LINE}}{84}
\entry{\code {COMP_POINT}}{84}
\entry{\code {COMP_TYPE}}{84}
\entry{\code {COMP_WORDBREAKS}}{84}
\entry{\code {COMP_WORDS}}{84}
\entry{\code {completion-display-width}}{126}
\entry{\code {completion-ignore-case}}{126}
\entry{\code {completion-map-case}}{126}
\entry{\code {completion-prefix-display-length}}{126}
\entry{\code {completion-query-items}}{126}
\entry{\code {COMPREPLY}}{85}
\entry{\code {convert-meta}}{127}
\entry{\code {COPROC}}{85}
\initial {D}
\entry{\code {DIRSTACK}}{84}
\entry{\code {disable-completion}}{126}
\entry{\code {DIRSTACK}}{85}
\entry{\code {disable-completion}}{127}
\initial {E}
\entry{\code {echo-control-characters}}{126}
\entry{\code {editing-mode}}{126}
\entry{\code {emacs-mode-string}}{126}
\entry{\code {EMACS}}{84}
\entry{\code {enable-active-region}}{126}
\entry{\code {enable-bracketed-paste}}{127}
\entry{\code {enable-keypad}}{127}
\entry{\code {ENV}}{84}
\entry{\code {EPOCHREALTIME}}{84}
\entry{\code {EPOCHSECONDS}}{84}
\entry{\code {EUID}}{84}
\entry{\code {EXECIGNORE}}{84}
\entry{\code {expand-tilde}}{127}
\entry{\code {echo-control-characters}}{127}
\entry{\code {editing-mode}}{127}
\entry{\code {emacs-mode-string}}{127}
\entry{\code {EMACS}}{85}
\entry{\code {enable-active-region}}{127}
\entry{\code {enable-bracketed-paste}}{128}
\entry{\code {enable-keypad}}{128}
\entry{\code {ENV}}{85}
\entry{\code {EPOCHREALTIME}}{85}
\entry{\code {EPOCHSECONDS}}{85}
\entry{\code {EUID}}{85}
\entry{\code {EXECIGNORE}}{85}
\entry{\code {expand-tilde}}{128}
\initial {F}
\entry{\code {FCEDIT}}{85}
\entry{\code {FIGNORE}}{85}
\entry{\code {FUNCNAME}}{85}
\entry{\code {FUNCNEST}}{85}
\entry{\code {FCEDIT}}{86}
\entry{\code {FIGNORE}}{86}
\entry{\code {FUNCNAME}}{86}
\entry{\code {FUNCNEST}}{86}
\initial {G}
\entry{\code {GLOBIGNORE}}{85}
\entry{\code {GLOBSORT}}{85}
\entry{\code {GROUPS}}{85}
\entry{\code {GLOBIGNORE}}{86}
\entry{\code {GLOBSORT}}{86}
\entry{\code {GROUPS}}{87}
\initial {H}
\entry{\code {histchars}}{86}
\entry{\code {HISTCMD}}{86}
\entry{\code {HISTCONTROL}}{86}
\entry{\code {HISTFILE}}{86}
\entry{\code {HISTFILESIZE}}{86}
\entry{\code {HISTIGNORE}}{86}
\entry{\code {history-preserve-point}}{127}
\entry{\code {history-size}}{127}
\entry{\code {HISTSIZE}}{87}
\entry{\code {HISTTIMEFORMAT}}{87}
\entry{\code {HOME}}{79}
\entry{\code {horizontal-scroll-mode}}{127}
\entry{\code {HOSTFILE}}{87}
\entry{\code {HOSTNAME}}{87}
\entry{\code {HOSTTYPE}}{87}
\entry{\code {histchars}}{87}
\entry{\code {HISTCMD}}{87}
\entry{\code {HISTCONTROL}}{87}
\entry{\code {HISTFILE}}{87}
\entry{\code {HISTFILESIZE}}{87}
\entry{\code {HISTIGNORE}}{87}
\entry{\code {history-preserve-point}}{128}
\entry{\code {history-size}}{128}
\entry{\code {HISTSIZE}}{88}
\entry{\code {HISTTIMEFORMAT}}{88}
\entry{\code {HOME}}{80}
\entry{\code {horizontal-scroll-mode}}{128}
\entry{\code {HOSTFILE}}{88}
\entry{\code {HOSTNAME}}{88}
\entry{\code {HOSTTYPE}}{88}
\initial {I}
\entry{\code {IFS}}{79}
\entry{\code {IGNOREEOF}}{87}
\entry{\code {input-meta}}{127}
\entry{\code {INPUTRC}}{87}
\entry{\code {INSIDE_EMACS}}{87}
\entry{\code {isearch-terminators}}{128}
\entry{\code {IFS}}{80}
\entry{\code {IGNOREEOF}}{88}
\entry{\code {input-meta}}{128}
\entry{\code {INPUTRC}}{88}
\entry{\code {INSIDE_EMACS}}{88}
\entry{\code {isearch-terminators}}{129}
\initial {K}
\entry{\code {keymap}}{128}
\entry{\code {keymap}}{129}
\initial {L}
\entry{\code {LANG}}{8, 87}
\entry{\code {LC_ALL}}{88}
\entry{\code {LC_COLLATE}}{88}
\entry{\code {LC_CTYPE}}{88}
\entry{\code {LC_MESSAGES}}{8, 88}
\entry{\code {LC_NUMERIC}}{88}
\entry{\code {LC_TIME}}{88}
\entry{\code {LINENO}}{88}
\entry{\code {LINES}}{88}
\entry{\code {LANG}}{8, 89}
\entry{\code {LC_ALL}}{89}
\entry{\code {LC_COLLATE}}{89}
\entry{\code {LC_CTYPE}}{89}
\entry{\code {LC_MESSAGES}}{8, 89}
\entry{\code {LC_NUMERIC}}{89}
\entry{\code {LC_TIME}}{89}
\entry{\code {LINENO}}{89}
\entry{\code {LINES}}{89}
\initial {M}
\entry{\code {MACHTYPE}}{88}
\entry{\code {MAIL}}{79}
\entry{\code {MAILCHECK}}{88}
\entry{\code {MAILPATH}}{79}
\entry{\code {MAPFILE}}{88}
\entry{\code {mark-modified-lines}}{128}
\entry{\code {mark-symlinked-directories}}{128}
\entry{\code {match-hidden-files}}{128}
\entry{\code {menu-complete-display-prefix}}{129}
\entry{\code {meta-flag}}{127}
\entry{\code {MACHTYPE}}{89}
\entry{\code {MAIL}}{80}
\entry{\code {MAILCHECK}}{89}
\entry{\code {MAILPATH}}{80}
\entry{\code {MAPFILE}}{89}
\entry{\code {mark-modified-lines}}{129}
\entry{\code {mark-symlinked-directories}}{129}
\entry{\code {match-hidden-files}}{129}
\entry{\code {menu-complete-display-prefix}}{130}
\entry{\code {meta-flag}}{128}
\initial {O}
\entry{\code {OLDPWD}}{88}
\entry{\code {OPTARG}}{79}
\entry{\code {OPTERR}}{88}
\entry{\code {OPTIND}}{79}
\entry{\code {OSTYPE}}{88}
\entry{\code {output-meta}}{129}
\entry{\code {OLDPWD}}{89}
\entry{\code {OPTARG}}{80}
\entry{\code {OPTERR}}{89}
\entry{\code {OPTIND}}{80}
\entry{\code {OSTYPE}}{89}
\entry{\code {output-meta}}{130}
\initial {P}
\entry{\code {page-completions}}{129}
\entry{\code {PATH}}{79}
\entry{\code {PIPESTATUS}}{88}
\entry{\code {POSIXLY_CORRECT}}{89}
\entry{\code {PPID}}{89}
\entry{\code {PROMPT_COMMAND}}{89}
\entry{\code {PROMPT_DIRTRIM}}{89}
\entry{\code {PS0}}{89}
\entry{\code {PS1}}{79}
\entry{\code {PS2}}{79}
\entry{\code {PS3}}{89}
\entry{\code {PS4}}{89}
\entry{\code {PWD}}{89}
\entry{\code {page-completions}}{130}
\entry{\code {PATH}}{80}
\entry{\code {PIPESTATUS}}{89}
\entry{\code {POSIXLY_CORRECT}}{90}
\entry{\code {PPID}}{90}
\entry{\code {PROMPT_COMMAND}}{90}
\entry{\code {PROMPT_DIRTRIM}}{90}
\entry{\code {PS0}}{90}
\entry{\code {PS1}}{80}
\entry{\code {PS2}}{80}
\entry{\code {PS3}}{90}
\entry{\code {PS4}}{90}
\entry{\code {PWD}}{90}
\initial {R}
\entry{\code {RANDOM}}{89}
\entry{\code {READLINE_ARGUMENT}}{89}
\entry{\code {READLINE_LINE}}{89}
\entry{\code {READLINE_MARK}}{89}
\entry{\code {READLINE_POINT}}{90}
\entry{\code {REPLY}}{90}
\entry{\code {revert-all-at-newline}}{129}
\entry{\code {RANDOM}}{90}
\entry{\code {READLINE_ARGUMENT}}{90}
\entry{\code {READLINE_LINE}}{90}
\entry{\code {READLINE_MARK}}{90}
\entry{\code {READLINE_POINT}}{91}
\entry{\code {REPLY}}{91}
\entry{\code {revert-all-at-newline}}{130}
\initial {S}
\entry{\code {search-ignore-case}}{129}
\entry{\code {SECONDS}}{90}
\entry{\code {SHELL}}{90}
\entry{\code {SHELLOPTS}}{90}
\entry{\code {SHLVL}}{90}
\entry{\code {show-all-if-ambiguous}}{129}
\entry{\code {show-all-if-unmodified}}{129}
\entry{\code {show-mode-in-prompt}}{129}
\entry{\code {skip-completed-text}}{130}
\entry{\code {SRANDOM}}{90}
\entry{\code {search-ignore-case}}{130}
\entry{\code {SECONDS}}{91}
\entry{\code {SHELL}}{91}
\entry{\code {SHELLOPTS}}{91}
\entry{\code {SHLVL}}{91}
\entry{\code {show-all-if-ambiguous}}{130}
\entry{\code {show-all-if-unmodified}}{130}
\entry{\code {show-mode-in-prompt}}{130}
\entry{\code {skip-completed-text}}{131}
\entry{\code {SRANDOM}}{91}
\initial {T}
\entry{\code {TEXTDOMAIN}}{8}
\entry{\code {TEXTDOMAINDIR}}{8}
\entry{\code {TIMEFORMAT}}{90}
\entry{\code {TMOUT}}{91}
\entry{\code {TMPDIR}}{91}
\entry{\code {TIMEFORMAT}}{91}
\entry{\code {TMOUT}}{92}
\entry{\code {TMPDIR}}{92}
\initial {U}
\entry{\code {UID}}{91}
\entry{\code {UID}}{92}
\initial {V}
\entry{\code {vi-cmd-mode-string}}{130}
\entry{\code {vi-ins-mode-string}}{130}
\entry{\code {visible-stats}}{130}
\entry{\code {vi-cmd-mode-string}}{131}
\entry{\code {vi-ins-mode-string}}{131}
\entry{\code {visible-stats}}{131}
+3 -3
View File
@@ -2,10 +2,10 @@
Copyright (C) 1988-2023 Free Software Foundation, Inc.
@end ignore
@set LASTCHANGE Thu Apr 20 15:08:33 EDT 2023
@set LASTCHANGE Sun May 14 15:33:30 EDT 2023
@set EDITION 5.2
@set VERSION 5.2
@set UPDATED 20 April 2023
@set UPDATED-MONTH April 2023
@set UPDATED 14 May 2023
@set UPDATED-MONTH May 2023
+2 -1
View File
@@ -2484,7 +2484,7 @@ uw_merge_temporary_env (void *ignore)
}
/* Catch-all cleanup function for lastpipe code for unwind-protects */
static void
void
uw_lastpipe_cleanup (void *s)
{
set_jobs_list_frozen ((intptr_t) s);
@@ -5915,6 +5915,7 @@ initialize_subshell (void)
variable_context = return_catch_flag = funcnest = evalnest = sourcenest = 0;
interrupt_execution = retain_fifos = 0; /* XXX */
executing_funsub = 0; /* XXX */
/* If we're not interactive, close the file descriptor from which we're
reading the current shell script. */
+2
View File
@@ -121,6 +121,8 @@ extern void restore_funcarray_state (struct func_array_state *);
extern void uw_restore_funcarray_state (void *);
#endif
extern void uw_lastpipe_cleanup (void *);
extern void bind_lastarg (char *);
extern void uw_dispose_fd_bitmap (void *);
+1 -1
View File
@@ -180,7 +180,7 @@ extern void show_shell_version (int);
go into a separate include file. */
/* declarations for functions defined in lib/sh/anonfile.c */
extern int anonopen (const char *, int);
extern int anonopen (const char *, int, char **);
extern int anonclose (int, const char *);
/* declarations for functions defined in lib/sh/casemod.c */
+3 -3
View File
@@ -337,7 +337,6 @@ static SigHandler *old_cont = (SigHandler *)SIG_DFL;
/* A place to temporarily save the current pipeline. */
static struct pipeline_saver *saved_pipeline;
static int saved_already_making_children;
/* Set this to non-zero whenever you don't want the jobs list to change at
all: no jobs deleted and no status change notifications. This is used,
@@ -470,6 +469,7 @@ alloc_pipeline_saver (void)
ret = (struct pipeline_saver *)xmalloc (sizeof (struct pipeline_saver));
ret->pipeline = 0;
ret->already_making_children = 0;
ret->next = 0;
return ret;
}
@@ -483,11 +483,11 @@ save_pipeline (int clear)
BLOCK_CHILD (set, oset);
saver = alloc_pipeline_saver ();
saver->pipeline = the_pipeline;
saver->already_making_children = already_making_children;
saver->next = saved_pipeline;
saved_pipeline = saver;
if (clear)
the_pipeline = (PROCESS *)NULL;
saved_already_making_children = already_making_children;
UNBLOCK_CHILD (oset);
}
@@ -501,10 +501,10 @@ restore_pipeline (int discard)
BLOCK_CHILD (set, oset);
old_pipeline = the_pipeline;
the_pipeline = saved_pipeline->pipeline;
already_making_children = saved_pipeline->already_making_children;
saver = saved_pipeline;
saved_pipeline = saved_pipeline->next;
free (saver);
already_making_children = saved_already_making_children;
UNBLOCK_CHILD (oset);
if (discard && old_pipeline)
+1
View File
@@ -72,6 +72,7 @@ typedef struct process {
struct pipeline_saver {
struct process *pipeline;
int already_making_children;
struct pipeline_saver *next;
};
+2 -2
View File
@@ -47,13 +47,13 @@ anonunlink (const char *fn)
}
int
anonopen (const char *name, int flags)
anonopen (const char *name, int flags, char **fn)
{
int fd, flag;
/* Heuristic */
flag = (name && *name == '/') ? MT_TEMPLATE : MT_USETMPDIR;
fd = sh_mktmpfd (name, flag|MT_USERANDOM|MT_READWRITE|MT_UNLINK, (char **)NULL);
fd = sh_mktmpfd (name, flag|MT_USERANDOM|MT_READWRITE|MT_UNLINK, fn);
return fd;
}
+33 -7
View File
@@ -3807,7 +3807,7 @@ parse_matched_pair (int qc, int open, int close, size_t *lenp, int flags)
count--;
/* handle nested ${...} specially. */
else if MBTEST(open != close && (tflags & LEX_WASDOL) && open == '{' && ch == open) /* } */
count++;
count++; /* XXX */
else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && ch == open) /* nested begin */
count++;
@@ -3961,10 +3961,21 @@ parse_matched_pair (int qc, int open, int close, size_t *lenp, int flags)
FREE (nestret);
}
else if ((flags & (P_ARRAYSUB|P_DOLBRACE)) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */
/* This also handles ${ command; } */
goto parse_dollar_word;
else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '(') /*)*/
/* $() inside $(( ))/$[ ] */
goto parse_dollar_word;
else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '{') /*)*/
/* ${} inside $(( ))/$[ ] */
{
int npeek;
npeek = shell_getc (1);
shell_ungetc (npeek);
if (FUNSUB_CHAR (npeek))
goto parse_dollar_word;
}
#if defined (PROCESS_SUBSTITUTION)
/* XXX - technically this should only be recognized at the start of
a word */
@@ -4272,7 +4283,7 @@ static char *
parse_comsub (int qc, int open, int close, size_t *lenp, int flags)
{
int peekc, r;
int start_lineno, dolbrace_spec, local_extglob, was_extpat;
int start_lineno, dolbrace_spec, local_extglob, was_extpat, was_word;
char *ret, *tcmd;
size_t retlen;
sh_parser_state_t ps;
@@ -4292,7 +4303,11 @@ parse_comsub (int qc, int open, int close, size_t *lenp, int flags)
{
peekc = shell_getc (1);
if (FUNSUB_CHAR (peekc))
dolbrace_spec = peekc;
{
dolbrace_spec = peekc;
if (dolbrace_spec == '(') /* ksh93 compatibility ) */
shell_ungetc (peekc);
}
else
{
shell_ungetc (peekc);
@@ -4308,6 +4323,7 @@ parse_comsub (int qc, int open, int close, size_t *lenp, int flags)
save_parser_state (&ps);
was_extpat = (parser_state & PST_EXTPAT);
was_word = 0;
/* State flags we don't want to persist into command substitutions. */
parser_state &= ~(PST_REGEXP|PST_EXTPAT|PST_CONDCMD|PST_CONDEXPR|PST_COMPASSIGN);
@@ -4353,6 +4369,14 @@ parse_comsub (int qc, int open, int close, size_t *lenp, int flags)
r = yyparse ();
if (open == '{')
{
if (current_token == shell_eof_token &&
(last_read_token == ';' || last_read_token == '\n') &&
(token_before_that == WORD || token_before_that == ASSIGNMENT_WORD))
was_word = 1;
}
if (need_here_doc > 0)
{
internal_warning ("command substitution: %d unterminated here-document%s", need_here_doc, (need_here_doc == 1) ? "" : "s");
@@ -4442,6 +4466,8 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she
strcpy (ret + 1, tcmd); /* ( */
if (lastc != '\n' && lastc != ';' && lastc != '&' && lastc != ')')
ret[retlen++] = ';';
else if (lastc == ')' && was_word) /* right paren can end a word */
ret[retlen++] = ';';
ret[retlen++] = ' ';
}
ret[retlen++] = close;
@@ -4457,7 +4483,7 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she
return ret;
}
/* Recursively call the parser to parse a $(...) command substitution. This is
/* Recursively call the parser to parse a command substitution. This is
called by the word expansion code and so does not have to reset as much
parser state before calling yyparse(). */
char *
@@ -4515,7 +4541,7 @@ xparse_dolparen (const char *base, char *string, int *indp, int flags)
local_extglob = extended_glob;
#endif
if (funsub && FUNSUB_CHAR (*string))
if (funsub && FUNSUB_CHAR (*string) && *string == '|')
string++;
token_to_read = funsub ? DOLBRACE : DOLPAREN; /* let's trick the parser */
@@ -4531,7 +4557,7 @@ xparse_dolparen (const char *base, char *string, int *indp, int flags)
/* reset_parser() clears shell_input_line and associated variables, including
parser_state, so we want to reset things, then restore what we need. */
restore_input_line_state (&ls);
restore_parser_state (&ps);
restore_parser_state (&ps); /* restores shell_eof_token */
#if defined (EXTENDED_GLOB)
extended_glob = local_extglob;
@@ -4580,7 +4606,7 @@ xparse_dolparen (const char *base, char *string, int *indp, int flags)
{
/*(*/
if ((flags & SX_NOERROR) == 0)
parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), ')');
parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), closer);
jump_to_top_level (DISCARD);
}
+1 -1
View File
@@ -78,7 +78,7 @@ struct dstack {
/* characters that can appear following ${ to introduce a function or value
substitution (this is mksh terminology and needs to be changed). */
#define FUNSUB_CHAR(n) ((n) == ' ' || (n) == '\t' || (n) == '\n' || (n) == '|')
#define FUNSUB_CHAR(n) ((n) == ' ' || (n) == '\t' || (n) == '\n' || (n) == '|' || (n) == '(') /* ) */
/* variable declarations from parse.y */
extern struct dstack dstack;
+3 -3
View File
@@ -396,7 +396,7 @@ top_level_cleanup (void)
run_unwind_protects ();
loop_level = continuing = breaking = funcnest = 0;
interrupt_execution = retain_fifos = 0;
interrupt_execution = retain_fifos = executing_funsub = 0;
comsub_ignore_return = return_catch_flag = wait_intr_flag = 0;
variable_context = 0; /* XXX */
}
@@ -464,7 +464,7 @@ throw_to_top_level (void)
run_unwind_protects ();
loop_level = continuing = breaking = funcnest = 0;
interrupt_execution = retain_fifos = 0;
interrupt_execution = retain_fifos = executing_funsub = 0;
comsub_ignore_return = return_catch_flag = wait_intr_flag = 0;
variable_context = 0;
@@ -632,7 +632,7 @@ termsig_handler (int sig)
/* Reset execution context */
loop_level = continuing = breaking = funcnest = 0;
interrupt_execution = retain_fifos = 0;
interrupt_execution = retain_fifos = executing_funsub = 0;
comsub_ignore_return = return_catch_flag = wait_intr_flag = 0;
run_exit_trap (); /* XXX - run exit trap possibly in signal context? */
+225 -19
View File
@@ -192,6 +192,9 @@ int fail_glob_expansion;
pattern substitution word expansion. */
int patsub_replacement = PATSUB_REPLACE_DEFAULT;
/* Are we executing a ${ command; } nofork comsub? */
int executing_funsub = 0;
/* Extern functions and variables from different files. */
extern struct fd_bitmap *current_fds_to_close;
extern int wordexp_only;
@@ -6745,18 +6748,89 @@ read_comsub (int fd, int quoted, int flags, int *rflag)
return istring;
}
static void
uw_pop_var_context (void *ignore)
{
pop_var_context ();
}
#if defined (ARRAY_VARS)
static void
uw_restore_pipestatus_array (void *a)
{
restore_pipestatus_array (a);
}
#endif
/* If S == -1, it's a special value saying to close stdin */
static void
restore_stdout (int fd)
{
if (fd == -1)
close (1);
else
{
dup2 (fd, 1);
close (fd);
}
}
static void
uw_restore_stdout (void *fd)
{
restore_stdout ((intptr_t) fd);
}
static void
uw_anonclose (void *fdesc)
{
STRING_INT_ALIST *af;
af = (STRING_INT_ALIST *)fdesc;
anonclose (af->token, af->word);
free (af->word);
}
static void
uw_unbind_variable (void *name)
{
unbind_variable (name);
}
static void
uw_restore_pipeline (void *discard)
{
restore_pipeline ((intptr_t) discard);
}
static void
uw_restore_errexit (void *eflag)
{
change_flag ('e', (intptr_t) eflag ? FLAG_ON : FLAG_OFF);
set_shellopts ();
}
static SHELL_VAR lambdafunc = { ".bash.lambda", 0, 0, 0, 0, 0, 0 };
WORD_DESC *
function_substitute (char *string, int quoted, int flags)
{
pid_t old_pipeline_pgrp;
volatile int save_return_catch_flag, function_code;
int valsub, stdout_valid, saveout, old_frozen;
int result, pflags, tflag, was_trap;
char *istring, *s;
int fd;
int result, fildes[2], function_value, pflags, rc, tflag, fork_flags;
int valsub;
WORD_DESC *ret;
SHELL_VAR *v;
STRING_INT_ALIST anonf;
int afd;
char *afn;
sigset_t set, oset;
#if defined (ARRAY_VARS)
ARRAY *ps;
#endif
istring = (char *)NULL;
if (valsub = (string && *string == '|'))
string++;
/* In the case of no command to run, just return NULL. */
for (s = string; s && *s && (shellblank (*s) || *s == '\n'); s++)
@@ -6764,31 +6838,164 @@ function_substitute (char *string, int quoted, int flags)
if (s == 0 || *s == 0)
return ((WORD_DESC *)NULL);
if (valsub = (*string == '|'))
string++;
istring = (char *)NULL;
/* Flags to pass to parse_and_execute() */
pflags = (interactive && sourcelevel == 0) ? SEVAL_RESETLINE : 0;
pflags |= SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE|SEVAL_NOOPTIMIZE; /* XXX */
/* Let's get an anonymous file before we really try anything else. */
if (valsub == 0)
{
afd = anonopen ("sh-nfc", 0, &afn); /* don't use filename yet */
if (afd < 0)
{
sys_error ("%s", _("function_substitute: cannot open anonymous file for output"));
exp_jump_to_top_level (DISCARD); /* XXX */
}
}
begin_unwind_frame ("nofork comsub");
/* Save command and expansion state we need. */
if (valsub == 0)
{
anonf.word = afn;
anonf.token = afd;
add_unwind_protect (uw_anonclose, (void *)&anonf);
}
unwind_protect_int (executing_funsub);
unwind_protect_int (expand_aliases);
unwind_protect_pointer (subst_assign_varlist);
unwind_protect_pointer (temporary_env);
unwind_protect_pointer (this_shell_function);
add_unwind_protect (uw_pop_var_context, 0);
#if defined (ARRAY_VARS)
ps = save_pipestatus_array ();
add_unwind_protect (uw_restore_pipestatus_array, ps);
#endif
subst_assign_varlist = 0;
push_context (lambdafunc.name, 1, temporary_env); /* make local variables work */
temporary_env = 0;
this_shell_function = &lambdafunc;
unwind_protect_int (verbose_flag);
change_flag ('v', FLAG_OFF);
/* When inherit_errexit option is not enabled, command substitution does
not inherit the -e flag. It is enabled when Posix mode is enabled */
if (inherit_errexit == 0)
{
unwind_protect_int (builtin_ignoring_errexit);
builtin_ignoring_errexit = 0;
add_unwind_protect (uw_restore_errexit, (void *) (intptr_t) errexit_flag);
change_flag ('e', FLAG_OFF);
}
set_shellopts ();
if (valsub == 0)
{
fflush (stdout);
fpurge (stdout);
stdout_valid = sh_validfd (1);
saveout = stdout_valid ? move_to_high_fd (1, 1, -1) : -1;
add_unwind_protect (uw_restore_stdout, (void *) (intptr_t) saveout);
/* Redirect stdout to the anonymous file */
if (dup2 (afd, 1) < 0)
{
sys_error ("%s", _("function_substitute: cannot duplicate anonymous file as standard output"));
run_unwind_frame ("nofork comsub");
exp_jump_to_top_level (DISCARD);
}
#ifdef __CYGWIN__
freopen (NULL, "w", stdout);
sh_setlinebuf (stdout);
#endif
}
else
{
v = make_local_variable ("REPLY", 0); /* should be new instance */
/* We don't check $REPLY for readonly yet, but we could */
if (v)
add_unwind_protect (uw_unbind_variable, "REPLY");
}
old_frozen = freeze_jobs_list ();
add_unwind_protect (uw_lastpipe_cleanup, (void *) (intptr_t) old_frozen);
#if defined (JOB_CONTROL)
old_pipeline_pgrp = pipeline_pgrp;
unwind_protect_var (pipeline_pgrp);
/* Don't reset the pipeline pgrp if we're already a subshell in a pipeline or
we've already forked to run a disk command (and are expanding redirections,
for example). */
if ((subshell_environment & (SUBSHELL_FORK|SUBSHELL_PIPE)) == 0)
pipeline_pgrp = shell_pgrp;
save_pipeline (1);
add_unwind_protect (uw_restore_pipeline, (void *) (intptr_t) 1);
stop_making_children ();
#endif /* JOB_CONTROL */
last_command_exit_value = EXECUTION_FAILURE;
report_error ("bad substitution: %s", string);
remove_quoted_escapes (string);
pipeline_pgrp = old_pipeline_pgrp;
restore_pipeline (1);
executing_funsub++;
if (expand_aliases)
expand_aliases = posixly_correct == 0;
/* exp_jump_to_top_level (DISCARD); */
return ((WORD_DESC *)NULL);
/* if we are in a position to accept return, we have to save the old values */
function_code = 0;
if (save_return_catch_flag = return_catch_flag)
{
unwind_protect_int (return_catch_flag);
unwind_protect_jmp_buf (return_catch);
}
was_trap = running_trap;
return_catch_flag++;
function_code = setjmp_nosigs (return_catch);
if (function_code)
{
parse_and_execute_cleanup (was_trap);
result = return_catch_value;
}
else
result = parse_and_execute (string, "nofork comsub", pflags);
/* rewind back to the start of the file and read the contents */
if (valsub == 0)
{
/* We call anonclose as part of the outer nofork unwind-protects */
BLOCK_SIGNAL (SIGINT, set, oset);
lseek (afd, 0, SEEK_SET);
tflag = 0;
istring = read_comsub (afd, quoted, flags, &tflag);
UNBLOCK_SIGNAL (oset);
}
else
{
s = get_string_value ("REPLY");
istring = s ? savestring (s) : savestring ("");
}
run_unwind_frame ("nofork comsub"); /* restores stdout, job control stuff */
last_command_subst_status = result;
if (posixly_correct == 0) /* POSIX interp 1150 */
last_command_exit_value = last_command_subst_status;
last_command_subst_pid = dollar_dollar_pid;
expand_aliases = expaliases_flag;
ret = alloc_word_desc ();
ret->word = istring;
ret->flags = tflag;
return (ret);
}
/* Perform command substitution on STRING. This returns a WORD_DESC * with the
@@ -6985,10 +7192,10 @@ command_substitute (char *string, int quoted, int flags)
/* When inherit_errexit option is not enabled, command substitution does
not inherit the -e flag. It is enabled when Posix mode is enabled */
if (inherit_errexit == 0)
{
builtin_ignoring_errexit = 0;
{
builtin_ignoring_errexit = 0;
change_flag ('e', FLAG_OFF);
}
}
set_shellopts ();
/* If we are expanding a redirection, we can dispose of any temporary
@@ -7075,7 +7282,6 @@ command_substitute (char *string, int quoted, int flags)
discard_unwind_frame ("read-comsub");
UNBLOCK_SIGNAL (oset);
current_command_subst_pid = pid;
last_command_subst_status = wait_for (pid, JWAIT_NOTERM);
last_command_subst_pid = pid;
last_made_pid = old_pid;
+1
View File
@@ -355,6 +355,7 @@ extern int inherit_errexit;
extern pid_t last_command_subst_pid;
extern int last_command_subst_status;
extern int executing_funsub;
/* Evaluates to 1 if C is a character in $IFS. */
#define isifs(c) (ifs_cmap[(unsigned char)(c)] != 0)
+74
View File
@@ -0,0 +1,74 @@
aa bb cc dd
AAaa bb cc ddBB
aa bb cc dd
aa bb cc dd
DDDDDaa bb cc ddEEEEE
aa bb cc dd
outside: 42
aa bb cc dd
outside:
assignment: 12
abcde
67890
12345
JOBaa bb cc ddCONTROL
./comsub2.tests: line 48: p: command not found
NOTFOUND
./comsub2.tests: line 56: p: command not found
./comsub2.tests: line 56: p: command not found
expand_aliases off
expand_aliases off
outside:
expand_aliases off
1
expand_aliases on
2
expand_aliases on
outside:
expand_aliases on
1
xx
expand_aliases on
2
xx
expand_aliases on
outside:
expand_aliases on
inside: 12 22 42
outside: 42 2
newlines
outside: 42
before: 1 2
after: 2
before: 1 2
after: 2
before: 1 2
after: 1 2
XnestedY
a nested b
one two
42
42
42
123
123
0
123
123
0
Mon Aug 29 20:03:02 EDT 2022
Mon Aug 29 20:03:02 EDT 2022
Mon Aug 29 20:03:02 EDT 2022
Mon Aug 29 20:03:02 EDT 2022
123
before 123
in for 123
outside before: value
inside before: value
inside after: funsub
inside: after false xxx
outside after: funsub
=====posix mode=====
outside before: value
+122
View File
@@ -0,0 +1,122 @@
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# initial set of tests for ${Ccommand; } nofork command substitution
# basic functionality
echo ${ printf '%s\n' aa bb cc dd; }
echo AA${ printf '%s\n' aa bb cc dd; }BB
echo ${ printf '%s\n' aa bb cc dd; return; echo ee ff; }
echo ${ printf '%s\n' aa bb cc dd
}
echo DDDDD${
printf '%s\n' aa bb cc dd
}EEEEE
unset x
echo ${ printf '%s\n' aa bb cc dd; x=42 ; return 12; echo ee ff; }
echo outside: $x
unset x
echo ${ typeset x; printf '%s\n' aa bb cc dd; x=42 ; return 12; echo ee ff; }
echo outside: $x
xx=${ typeset x; printf '%s\n' aa bb cc dd; x=42 ; return 12; echo ee ff; }
echo assignment: $?
unset xx
echo ${( echo abcde )} # works in ksh93
echo ${| echo 67890; REPLY=12345; } # works in mksh
# basic job control
set -m
echo this should disappear | echo JOB${ printf '%s\n' aa bb cc dd; }CONTROL | cat
set +m
# command not found should still echo error messages to stderr
echo NOT${ p; }FOUND
# alias handling in command substitutions, default and posix mode
alias p=printf
echo "${ typeset x;
for f in 1 2; do p '%s\n' $f ; shopt expand_aliases; done
x=42 ; return; echo this should not be seen; }"
echo outside: $x
shopt expand_aliases
set -o posix
echo "${ typeset x;
for f in 1 2; do p '%s\n' $f ; shopt expand_aliases; done
x=42 ; return; echo this should not be seen; }"
echo outside: $x
shopt expand_aliases
set +o posix
shopt -s expand_aliases
alias p=printf
echo "${ typeset x;
for f in 1 2; do p '%s\n' $f ; /bin/echo xx ; shopt expand_aliases; done
x=42 ; return; echo ee ff; }"
echo outside: $x
shopt expand_aliases
# more tests for value substitutions and local variables
a=1 b=2
a=${| local b ; a=12 ; b=22 ; REPLY=42 ; echo inside: $a $b $REPLY; }
echo outside: $a $b
unset a b
# this form doesn't remove the trailing newlines
REPLY=42
a=${| REPLY=$'newlines\n\n'; }
echo "$a"
echo outside: $REPLY
# how do we handle shift with these weird ksh93 function-like semantics?
# ksh93 doesn't reset the positional parameters here
set -- 1 2
echo before: "$@"
: "${ shift;}"
echo after: "$@"
set -- 1 2
echo before: "$@"
: "${| shift;}"
echo after: "$@"
set -- 1 2
echo before: "$@"
: "${( shift)}"
echo after: "$@"
# nested funsubs
echo ${ echo X${ echo nested; }Y; }
echo ${ echo a ; echo ${ echo nested; }; echo b; }
# nested funsubs/comsubs
x=${
echo ${ echo one;} $(echo two)
}
echo $x
# mixing funsubs and arithmetic expansion
echo $(( ${ echo 24 + 18; }))
echo $(( ${ echo 14 + 18; }+ 10))
echo ${ echo $(( 24+18 )); }
# alias expansion and nested funsubs in other constructs
${THIS_SH} ./comsub21.sub
${THIS_SH} ./comsub22.sub
+65
View File
@@ -0,0 +1,65 @@
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# posix-mode alias expansion in nofork command substitutions within
# other constructs
DATE='Mon Aug 29 20:03:02 EDT 2022'
shopt -s expand_aliases
alias number="echo 123"
echo ${ number; }
echo $(( ${ number; } ))
(( ${ number; } )) ; echo $?
set -o posix
echo ${ number; }
echo $(( ${ number; } ))
(( ${ number; } )) ; echo $?
set +o posix
# have to turn it back on after leaving posix mode
shopt -s expand_aliases
alias my_alias='echo $DATE'
echo ${ eval my_alias; }
echo ${ my_alias; }
set -o posix
echo ${ eval my_alias; }
echo ${ my_alias; }
set +o posix ; shopt -s expand_aliases
alias e=echo
alias v='e 123'
set -o posix
echo ${ v; }
echo ${ echo before ; v; }
echo ${ for f in 0; do
echo in for
done; v; }
set +o posix ; shopt -s expand_aliases
alias let='let --'
let '1 == 1'
: ${ let '1 == 1'; }
set -o posix
let '1 == 1'
: ${ let '1 == 1'; }
set +o posix ; shopt -s expand_aliases
+26
View File
@@ -0,0 +1,26 @@
# tests for inheriting set -e into command substitutions
set -e
var=value
echo "outside before: $var"
echo "${
echo "inside before: $var"
var=funsub
echo "inside after: $var"
false;
echo inside: after false
}" xxx
echo "outside after: $var"
set -o posix
echo =====posix mode=====
var=value
echo "outside before: $var"
echo "${
echo "inside before: $var"
var=funsub
echo "inside after: $var"
false;
echo inside: after false
}" xxx
echo "outside after: $var"
+1 -1
View File
@@ -5,7 +5,7 @@ exportfunc ok 2
./exportfunc.tests: line 43: cve7169-bad2: No such file or directory
./exportfunc1.sub: line 14: maximum here-document count exceeded
./exportfunc.tests: line 72: HELLO_WORLD: No such file or directory
eval ok
./exportfunc.tests: eval: line 83: unexpected EOF while looking for matching `}'
./exportfunc3.sub: line 23: export: foo=bar: cannot export
status: 1
equals-1
+1 -2
View File
@@ -78,8 +78,7 @@ env -i BASH_FUNC_x%%='() { _; } >_[${ $() }] { id; }' ${THIS_SH} -c : 2>/dev/nul
env BASH_FUNC_x%%=$'() { _;}>_[$($())]\n{ echo vuln;}' ${THIS_SH} -c : 2>/dev/null
eval 'x() { _;}>_[$($())] { echo vuln;}' 2>/dev/null
echo this will fail now that '${ ' has syntactic meaning
# this fails looking for closing `}' now that `${ ' has syntactic meaning
eval 'foo() { _; } >_[${ $() }] ;{ echo eval ok; }'
# other tests fixed in bash43-030 concerning function name transformation
+2
View File
@@ -0,0 +1,2 @@
${THIS_SH} ./comsub2.tests > ${BASH_TSTOUT} 2>&1
diff ${BASH_TSTOUT} comsub2.right && rm -f ${BASH_TSTOUT}