mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-21 21:07:57 +02:00
17909 lines
1019 KiB
HTML
17909 lines
1019 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<!-- Created by GNU Texinfo 7.2, https://www.gnu.org/software/texinfo/ -->
|
|
<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.3, 19 September 2025).
|
|
|
|
This is Edition 5.3, last updated 19 September 2025,
|
|
of The GNU Bash Reference Manual,
|
|
for Bash, Version 5.3.
|
|
|
|
Copyright © 1988-2025 Free Software Foundation, Inc.
|
|
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
under the terms of the GNU Free Documentation License, Version 1.3 or
|
|
any later version published by the Free Software Foundation; with no
|
|
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
|
A copy of the license is included in the section entitled
|
|
"GNU Free Documentation License". -->
|
|
<title>Bash Reference Manual</title>
|
|
|
|
<meta name="description" content="Bash Reference Manual">
|
|
<meta name="keywords" content="Bash Reference Manual">
|
|
<meta name="resource-type" content="document">
|
|
<meta name="distribution" content="global">
|
|
<meta name="Generator" content="makeinfo">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
<link href="#Top" rel="start" title="Top">
|
|
<link href="#Indexes" rel="index" title="Indexes">
|
|
<link href="#SEC_Contents" rel="contents" title="Table of Contents">
|
|
<link href="dir.html#Top" rel="up" title="(dir)">
|
|
<link href="#Introduction" rel="next" title="Introduction">
|
|
<link href="dir.html#Top" rel="prev" title="(dir)">
|
|
<style type="text/css">
|
|
<!--
|
|
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
|
|
a.summary-letter-printindex {text-decoration: none}
|
|
div.center {text-align:center}
|
|
div.display {margin-left: 3.2em}
|
|
div.example {margin-left: 3.2em}
|
|
kbd.kbd {font-style: oblique}
|
|
kbd.key {font-style: normal}
|
|
pre.display-preformatted {font-family: inherit}
|
|
span.r {font-family: initial; font-weight: normal; font-style: normal}
|
|
span:hover a.copiable-link {visibility: visible}
|
|
td.printindex-index-entry {vertical-align: top}
|
|
td.printindex-index-section {vertical-align: top; padding-left: 1em}
|
|
th.entries-header-printindex {text-align:left}
|
|
th.sections-header-printindex {text-align:left; padding-left: 1em}
|
|
ul.mark-bullet {list-style-type: disc}
|
|
ul.toc-numbered-mark {list-style: none}
|
|
-->
|
|
</style>
|
|
|
|
|
|
</head>
|
|
|
|
<body lang="en">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="top-level-extent" id="Top">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Introduction" accesskey="n" rel="next">Introduction</a>, Previous: <a href="dir.html#Top" accesskey="p" rel="prev">(dir)</a>, Up: <a href="dir.html#Top" accesskey="u" rel="up">(dir)</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h1 class="top" id="Bash-Features-1"><span>Bash Features<a class="copiable-link" href="#Bash-Features-1"> ¶</a></span></h1>
|
|
|
|
<p>This text is a brief description of the features that are present in
|
|
the Bash shell (version 5.3, 19 September 2025).
|
|
The Bash home page is <a class="url" href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>.
|
|
</p>
|
|
<p>This is Edition 5.3, last updated 19 September 2025,
|
|
of <cite class="cite">The GNU Bash Reference Manual</cite>,
|
|
for <code class="code">Bash</code>, Version 5.3.
|
|
</p>
|
|
<p>Bash contains features that appear in other popular shells, and some
|
|
features that only appear in Bash.
|
|
Some of the shells that Bash has
|
|
borrowed concepts from are the Bourne Shell (<samp class="file">sh</samp>), the Korn Shell
|
|
(<samp class="file">ksh</samp>), and the C-shell (<samp class="file">csh</samp> and its successor,
|
|
<samp class="file">tcsh</samp>).
|
|
The following menu breaks the features up into
|
|
categories, noting which features were inspired by other shells and
|
|
which are specific to Bash.
|
|
</p>
|
|
<p>This manual is meant as a brief introduction to features found in Bash.
|
|
The Bash manual page should be used as the definitive
|
|
reference on shell behavior.
|
|
</p>
|
|
|
|
<div class="region-contents" id="SEC_Contents">
|
|
<h2 class="contents-heading">Table of Contents</h2>
|
|
|
|
<div class="contents">
|
|
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Introduction" href="#Introduction">1 Introduction</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-What-is-Bash_003f" href="#What-is-Bash_003f">1.1 What is Bash?</a></li>
|
|
<li><a id="toc-What-is-a-shell_003f" href="#What-is-a-shell_003f">1.2 What is a shell?</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Definitions" href="#Definitions">2 Definitions</a></li>
|
|
<li><a id="toc-Basic-Shell-Features" href="#Basic-Shell-Features">3 Basic Shell Features</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Shell-Syntax" href="#Shell-Syntax">3.1 Shell Syntax</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Shell-Operation" href="#Shell-Operation">3.1.1 Shell Operation</a></li>
|
|
<li><a id="toc-Quoting" href="#Quoting">3.1.2 Quoting</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Escape-Character" href="#Escape-Character">3.1.2.1 Escape Character</a></li>
|
|
<li><a id="toc-Single-Quotes" href="#Single-Quotes">3.1.2.2 Single Quotes</a></li>
|
|
<li><a id="toc-Double-Quotes" href="#Double-Quotes">3.1.2.3 Double Quotes</a></li>
|
|
<li><a id="toc-ANSI_002dC-Quoting" href="#ANSI_002dC-Quoting">3.1.2.4 ANSI-C Quoting</a></li>
|
|
<li><a id="toc-Locale_002dSpecific-Translation" href="#Locale-Translation">3.1.2.5 Locale-Specific Translation</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Comments" href="#Comments">3.1.3 Comments</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Shell-Commands" href="#Shell-Commands">3.2 Shell Commands</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Reserved-Words" href="#Reserved-Words">3.2.1 Reserved Words</a></li>
|
|
<li><a id="toc-Simple-Commands" href="#Simple-Commands">3.2.2 Simple Commands</a></li>
|
|
<li><a id="toc-Pipelines" href="#Pipelines">3.2.3 Pipelines</a></li>
|
|
<li><a id="toc-Lists-of-Commands" href="#Lists">3.2.4 Lists of Commands</a></li>
|
|
<li><a id="toc-Compound-Commands" href="#Compound-Commands">3.2.5 Compound Commands</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Looping-Constructs" href="#Looping-Constructs">3.2.5.1 Looping Constructs</a></li>
|
|
<li><a id="toc-Conditional-Constructs" href="#Conditional-Constructs">3.2.5.2 Conditional Constructs</a></li>
|
|
<li><a id="toc-Grouping-Commands" href="#Command-Grouping">3.2.5.3 Grouping Commands</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Coprocesses" href="#Coprocesses">3.2.6 Coprocesses</a></li>
|
|
<li><a id="toc-GNU-Parallel" href="#GNU-Parallel">3.2.7 GNU Parallel</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Shell-Functions" href="#Shell-Functions">3.3 Shell Functions</a></li>
|
|
<li><a id="toc-Shell-Parameters" href="#Shell-Parameters">3.4 Shell Parameters</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Positional-Parameters" href="#Positional-Parameters">3.4.1 Positional Parameters</a></li>
|
|
<li><a id="toc-Special-Parameters" href="#Special-Parameters">3.4.2 Special Parameters</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Shell-Expansions" href="#Shell-Expansions">3.5 Shell Expansions</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Brace-Expansion" href="#Brace-Expansion">3.5.1 Brace Expansion</a></li>
|
|
<li><a id="toc-Tilde-Expansion" href="#Tilde-Expansion">3.5.2 Tilde Expansion</a></li>
|
|
<li><a id="toc-Shell-Parameter-Expansion" href="#Shell-Parameter-Expansion">3.5.3 Shell Parameter Expansion</a></li>
|
|
<li><a id="toc-Command-Substitution" href="#Command-Substitution">3.5.4 Command Substitution</a></li>
|
|
<li><a id="toc-Arithmetic-Expansion" href="#Arithmetic-Expansion">3.5.5 Arithmetic Expansion</a></li>
|
|
<li><a id="toc-Process-Substitution" href="#Process-Substitution">3.5.6 Process Substitution</a></li>
|
|
<li><a id="toc-Word-Splitting" href="#Word-Splitting">3.5.7 Word Splitting</a></li>
|
|
<li><a id="toc-Filename-Expansion" href="#Filename-Expansion">3.5.8 Filename Expansion</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Pattern-Matching" href="#Pattern-Matching">3.5.8.1 Pattern Matching</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Quote-Removal" href="#Quote-Removal">3.5.9 Quote Removal</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Redirections" href="#Redirections">3.6 Redirections</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Redirecting-Input" href="#Redirecting-Input">3.6.1 Redirecting Input</a></li>
|
|
<li><a id="toc-Redirecting-Output" href="#Redirecting-Output">3.6.2 Redirecting Output</a></li>
|
|
<li><a id="toc-Appending-Redirected-Output" href="#Appending-Redirected-Output">3.6.3 Appending Redirected Output</a></li>
|
|
<li><a id="toc-Redirecting-Standard-Output-and-Standard-Error" href="#Redirecting-Standard-Output-and-Standard-Error">3.6.4 Redirecting Standard Output and Standard Error</a></li>
|
|
<li><a id="toc-Appending-Standard-Output-and-Standard-Error" href="#Appending-Standard-Output-and-Standard-Error">3.6.5 Appending Standard Output and Standard Error</a></li>
|
|
<li><a id="toc-Here-Documents" href="#Here-Documents">3.6.6 Here Documents</a></li>
|
|
<li><a id="toc-Here-Strings" href="#Here-Strings">3.6.7 Here Strings</a></li>
|
|
<li><a id="toc-Duplicating-File-Descriptors" href="#Duplicating-File-Descriptors">3.6.8 Duplicating File Descriptors</a></li>
|
|
<li><a id="toc-Moving-File-Descriptors" href="#Moving-File-Descriptors">3.6.9 Moving File Descriptors</a></li>
|
|
<li><a id="toc-Opening-File-Descriptors-for-Reading-and-Writing" href="#Opening-File-Descriptors-for-Reading-and-Writing">3.6.10 Opening File Descriptors for Reading and Writing</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Executing-Commands" href="#Executing-Commands">3.7 Executing Commands</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Simple-Command-Expansion" href="#Simple-Command-Expansion">3.7.1 Simple Command Expansion</a></li>
|
|
<li><a id="toc-Command-Search-and-Execution" href="#Command-Search-and-Execution">3.7.2 Command Search and Execution</a></li>
|
|
<li><a id="toc-Command-Execution-Environment" href="#Command-Execution-Environment">3.7.3 Command Execution Environment</a></li>
|
|
<li><a id="toc-Environment" href="#Environment">3.7.4 Environment</a></li>
|
|
<li><a id="toc-Exit-Status" href="#Exit-Status">3.7.5 Exit Status</a></li>
|
|
<li><a id="toc-Signals" href="#Signals">3.7.6 Signals</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Shell-Scripts" href="#Shell-Scripts">3.8 Shell Scripts</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Shell-Builtin-Commands" href="#Shell-Builtin-Commands">4 Shell Builtin Commands</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Bourne-Shell-Builtins" href="#Bourne-Shell-Builtins">4.1 Bourne Shell Builtins</a></li>
|
|
<li><a id="toc-Bash-Builtin-Commands" href="#Bash-Builtins">4.2 Bash Builtin Commands</a></li>
|
|
<li><a id="toc-Modifying-Shell-Behavior" href="#Modifying-Shell-Behavior">4.3 Modifying Shell Behavior</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-The-Set-Builtin" href="#The-Set-Builtin">4.3.1 The Set Builtin</a></li>
|
|
<li><a id="toc-The-Shopt-Builtin" href="#The-Shopt-Builtin">4.3.2 The Shopt Builtin</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Special-Builtins" href="#Special-Builtins">4.4 Special Builtins</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Shell-Variables" href="#Shell-Variables">5 Shell Variables</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Bourne-Shell-Variables" href="#Bourne-Shell-Variables">5.1 Bourne Shell Variables</a></li>
|
|
<li><a id="toc-Bash-Variables" href="#Bash-Variables">5.2 Bash Variables</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Bash-Features-1" href="#Bash-Features">6 Bash Features</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Invoking-Bash" href="#Invoking-Bash">6.1 Invoking Bash</a></li>
|
|
<li><a id="toc-Bash-Startup-Files" href="#Bash-Startup-Files">6.2 Bash Startup Files</a></li>
|
|
<li><a id="toc-Interactive-Shells" href="#Interactive-Shells">6.3 Interactive Shells</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-What-is-an-Interactive-Shell_003f" href="#What-is-an-Interactive-Shell_003f">6.3.1 What is an Interactive Shell?</a></li>
|
|
<li><a id="toc-Is-this-Shell-Interactive_003f" href="#Is-this-Shell-Interactive_003f">6.3.2 Is this Shell Interactive?</a></li>
|
|
<li><a id="toc-Interactive-Shell-Behavior" href="#Interactive-Shell-Behavior">6.3.3 Interactive Shell Behavior</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Bash-Conditional-Expressions" href="#Bash-Conditional-Expressions">6.4 Bash Conditional Expressions</a></li>
|
|
<li><a id="toc-Shell-Arithmetic" href="#Shell-Arithmetic">6.5 Shell Arithmetic</a></li>
|
|
<li><a id="toc-Aliases" href="#Aliases">6.6 Aliases</a></li>
|
|
<li><a id="toc-Arrays" href="#Arrays">6.7 Arrays</a></li>
|
|
<li><a id="toc-The-Directory-Stack" href="#The-Directory-Stack">6.8 The Directory Stack</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Directory-Stack-Builtins" href="#Directory-Stack-Builtins">6.8.1 Directory Stack Builtins</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Controlling-the-Prompt" href="#Controlling-the-Prompt">6.9 Controlling the Prompt</a></li>
|
|
<li><a id="toc-The-Restricted-Shell" href="#The-Restricted-Shell">6.10 The Restricted Shell</a></li>
|
|
<li><a id="toc-Bash-and-POSIX" href="#Bash-POSIX-Mode">6.11 Bash and POSIX</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-What-is-POSIX_003f" href="#What-is-POSIX_003f">6.11.1 What is POSIX?</a></li>
|
|
<li><a id="toc-Bash-POSIX-Mode" href="#Bash-POSIX-Mode-1">6.11.2 Bash POSIX Mode</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Shell-Compatibility-Mode" href="#Shell-Compatibility-Mode">6.12 Shell Compatibility Mode</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Job-Control" href="#Job-Control">7 Job Control</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Job-Control-Basics" href="#Job-Control-Basics">7.1 Job Control Basics</a></li>
|
|
<li><a id="toc-Job-Control-Builtins" href="#Job-Control-Builtins">7.2 Job Control Builtins</a></li>
|
|
<li><a id="toc-Job-Control-Variables" href="#Job-Control-Variables">7.3 Job Control Variables</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Command-Line-Editing" href="#Command-Line-Editing">8 Command Line Editing</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Introduction-to-Line-Editing" href="#Introduction-and-Notation">8.1 Introduction to Line Editing</a></li>
|
|
<li><a id="toc-Readline-Interaction" href="#Readline-Interaction">8.2 Readline Interaction</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Readline-Bare-Essentials" href="#Readline-Bare-Essentials">8.2.1 Readline Bare Essentials</a></li>
|
|
<li><a id="toc-Readline-Movement-Commands" href="#Readline-Movement-Commands">8.2.2 Readline Movement Commands</a></li>
|
|
<li><a id="toc-Readline-Killing-Commands" href="#Readline-Killing-Commands">8.2.3 Readline Killing Commands</a></li>
|
|
<li><a id="toc-Readline-Arguments" href="#Readline-Arguments">8.2.4 Readline Arguments</a></li>
|
|
<li><a id="toc-Searching-for-Commands-in-the-History" href="#Searching">8.2.5 Searching for Commands in the History</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Readline-Init-File" href="#Readline-Init-File">8.3 Readline Init File</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Readline-Init-File-Syntax" href="#Readline-Init-File-Syntax">8.3.1 Readline Init File Syntax</a></li>
|
|
<li><a id="toc-Conditional-Init-Constructs" href="#Conditional-Init-Constructs">8.3.2 Conditional Init Constructs</a></li>
|
|
<li><a id="toc-Sample-Init-File" href="#Sample-Init-File">8.3.3 Sample Init File</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Bindable-Readline-Commands" href="#Bindable-Readline-Commands">8.4 Bindable Readline Commands</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Commands-For-Moving" href="#Commands-For-Moving">8.4.1 Commands For Moving</a></li>
|
|
<li><a id="toc-Commands-For-Manipulating-The-History" href="#Commands-For-History">8.4.2 Commands For Manipulating The History</a></li>
|
|
<li><a id="toc-Commands-For-Changing-Text" href="#Commands-For-Text">8.4.3 Commands For Changing Text</a></li>
|
|
<li><a id="toc-Killing-And-Yanking" href="#Commands-For-Killing">8.4.4 Killing And Yanking</a></li>
|
|
<li><a id="toc-Specifying-Numeric-Arguments" href="#Numeric-Arguments">8.4.5 Specifying Numeric Arguments</a></li>
|
|
<li><a id="toc-Letting-Readline-Type-For-You" href="#Commands-For-Completion">8.4.6 Letting Readline Type For You</a></li>
|
|
<li><a id="toc-Keyboard-Macros" href="#Keyboard-Macros">8.4.7 Keyboard Macros</a></li>
|
|
<li><a id="toc-Some-Miscellaneous-Commands" href="#Miscellaneous-Commands">8.4.8 Some Miscellaneous Commands</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Readline-vi-Mode" href="#Readline-vi-Mode">8.5 Readline vi Mode</a></li>
|
|
<li><a id="toc-Programmable-Completion" href="#Programmable-Completion">8.6 Programmable Completion</a></li>
|
|
<li><a id="toc-Programmable-Completion-Builtins" href="#Programmable-Completion-Builtins">8.7 Programmable Completion Builtins</a></li>
|
|
<li><a id="toc-A-Programmable-Completion-Example" href="#A-Programmable-Completion-Example">8.8 A Programmable Completion Example</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Using-History-Interactively" href="#Using-History-Interactively">9 Using History Interactively</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Bash-History-Facilities" href="#Bash-History-Facilities">9.1 Bash History Facilities</a></li>
|
|
<li><a id="toc-Bash-History-Builtins" href="#Bash-History-Builtins">9.2 Bash History Builtins</a></li>
|
|
<li><a id="toc-History-Expansion" href="#History-Interaction">9.3 History Expansion</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Event-Designators" href="#Event-Designators">9.3.1 Event Designators</a></li>
|
|
<li><a id="toc-Word-Designators" href="#Word-Designators">9.3.2 Word Designators</a></li>
|
|
<li><a id="toc-Modifiers" href="#Modifiers">9.3.3 Modifiers</a></li>
|
|
</ul></li>
|
|
</ul></li>
|
|
<li><a id="toc-Installing-Bash" href="#Installing-Bash">10 Installing Bash</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Basic-Installation" href="#Basic-Installation">10.1 Basic Installation</a></li>
|
|
<li><a id="toc-Compilers-and-Options" href="#Compilers-and-Options">10.2 Compilers and Options</a></li>
|
|
<li><a id="toc-Compiling-For-Multiple-Architectures" href="#Compiling-For-Multiple-Architectures">10.3 Compiling For Multiple Architectures</a></li>
|
|
<li><a id="toc-Installation-Names" href="#Installation-Names">10.4 Installation Names</a></li>
|
|
<li><a id="toc-Specifying-the-System-Type" href="#Specifying-the-System-Type">10.5 Specifying the System Type</a></li>
|
|
<li><a id="toc-Sharing-Defaults" href="#Sharing-Defaults">10.6 Sharing Defaults</a></li>
|
|
<li><a id="toc-Operation-Controls" href="#Operation-Controls">10.7 Operation Controls</a></li>
|
|
<li><a id="toc-Optional-Features" href="#Optional-Features">10.8 Optional Features</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-Reporting-Bugs" href="#Reporting-Bugs">Appendix A Reporting Bugs</a></li>
|
|
<li><a id="toc-Major-Differences-From-The-Bourne-Shell" href="#Major-Differences-From-The-Bourne-Shell">Appendix B Major Differences From The Bourne Shell</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Implementation-Differences-From-The-SVR4_002e2-Shell" href="#Implementation-Differences-From-The-SVR4_002e2-Shell">B.1 Implementation Differences From The SVR4.2 Shell</a></li>
|
|
</ul></li>
|
|
<li><a id="toc-GNU-Free-Documentation-License" href="#GNU-Free-Documentation-License">Appendix C GNU Free Documentation License</a></li>
|
|
<li><a id="toc-Indexes" href="#Indexes">Appendix D Indexes</a>
|
|
<ul class="toc-numbered-mark">
|
|
<li><a id="toc-Index-of-Shell-Builtin-Commands" href="#Builtin-Index" rel="index">D.1 Index of Shell Builtin Commands</a></li>
|
|
<li><a id="toc-Index-of-Shell-Reserved-Words" href="#Reserved-Word-Index" rel="index">D.2 Index of Shell Reserved Words</a></li>
|
|
<li><a id="toc-Parameter-and-Variable-Index" href="#Variable-Index" rel="index">D.3 Parameter and Variable Index</a></li>
|
|
<li><a id="toc-Function-Index" href="#Function-Index" rel="index">D.4 Function Index</a></li>
|
|
<li><a id="toc-Concept-Index" href="#Concept-Index" rel="index">D.5 Concept Index</a></li>
|
|
</ul></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<hr>
|
|
<div class="chapter-level-extent" id="Introduction">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Definitions" accesskey="n" rel="next">Definitions</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Introduction-1"><span>1 Introduction<a class="copiable-link" href="#Introduction-1"> ¶</a></span></h2>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#What-is-Bash_003f" accesskey="1">What is Bash?</a></li>
|
|
<li><a href="#What-is-a-shell_003f" accesskey="2">What is a shell?</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="What-is-Bash_003f">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#What-is-a-shell_003f" accesskey="n" rel="next">What is a shell?</a>, Up: <a href="#Introduction" accesskey="u" rel="up">Introduction</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="What-is-Bash_003f-1"><span>1.1 What is Bash?<a class="copiable-link" href="#What-is-Bash_003f-1"> ¶</a></span></h3>
|
|
|
|
<p>Bash is the shell, or command language interpreter,
|
|
for the <small class="sc">GNU</small> operating system.
|
|
The name is an acronym for the ‘<samp class="samp">Bourne-Again SHell</samp>’,
|
|
a pun on Stephen Bourne, the author of the direct ancestor of
|
|
the current Unix shell <code class="code">sh</code>,
|
|
which appeared in the Seventh Edition Bell Labs Research version
|
|
of Unix.
|
|
</p>
|
|
<p>Bash is largely compatible with <code class="code">sh</code> and incorporates useful
|
|
features from the Korn shell <code class="code">ksh</code> and the C shell <code class="code">csh</code>.
|
|
It is intended to be a conformant implementation of the <small class="sc">IEEE</small>
|
|
<small class="sc">POSIX</small> Shell and Tools portion of the <small class="sc">IEEE</small> <small class="sc">POSIX</small>
|
|
specification (<small class="sc">IEEE</small> Standard 1003.1).
|
|
It offers functional improvements over <code class="code">sh</code> for both interactive and
|
|
programming use.
|
|
</p>
|
|
<p>While the <small class="sc">GNU</small> operating system provides other shells, including
|
|
a version of <code class="code">csh</code>, Bash is the default shell.
|
|
Like other <small class="sc">GNU</small> software, Bash is quite portable. It currently runs
|
|
on nearly every version of Unix and a few other operating systems −
|
|
independently-supported ports exist for Windows and other platforms.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="What-is-a-shell_003f">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#What-is-Bash_003f" accesskey="p" rel="prev">What is Bash?</a>, Up: <a href="#Introduction" accesskey="u" rel="up">Introduction</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="What-is-a-shell_003f-1"><span>1.2 What is a shell?<a class="copiable-link" href="#What-is-a-shell_003f-1"> ¶</a></span></h3>
|
|
|
|
<p>At its base, a shell is simply a macro processor that executes commands.
|
|
The term macro processor means functionality where text
|
|
and symbols are expanded to create larger expressions.
|
|
</p>
|
|
<p>A Unix shell is both a command interpreter and a programming language.
|
|
As a command interpreter, the shell provides the user
|
|
interface to the rich set of <small class="sc">GNU</small> utilities.
|
|
The programming language features allow these utilities to be combined.
|
|
Users can create files containing commands, and these become
|
|
commands themselves.
|
|
These new commands have the same status as
|
|
system commands in directories such as <samp class="file">/bin</samp>, allowing users
|
|
or groups to establish custom environments to automate their common
|
|
tasks.
|
|
</p>
|
|
<p>Shells may be used interactively or non-interactively. In
|
|
interactive mode, they accept input typed from the keyboard.
|
|
When executing non-interactively, shells execute commands read
|
|
from a file or a string.
|
|
</p>
|
|
<p>A shell allows execution of <small class="sc">GNU</small> commands, both synchronously and
|
|
asynchronously.
|
|
The shell waits for synchronous commands to complete before accepting
|
|
more input; asynchronous commands continue to execute in parallel
|
|
with the shell while it reads and executes additional commands.
|
|
The <em class="dfn">redirection</em> constructs permit
|
|
fine-grained control of the input and output of those commands.
|
|
Moreover, the shell allows control over the contents of commands’
|
|
environments.
|
|
</p>
|
|
<p>Shells also provide a small set of built-in
|
|
commands (<em class="dfn">builtins</em>) implementing functionality impossible
|
|
or inconvenient to obtain via separate utilities.
|
|
For example, <code class="code">cd</code>, <code class="code">break</code>, <code class="code">continue</code>, and
|
|
<code class="code">exec</code> cannot be implemented outside of the shell because
|
|
they directly manipulate the shell itself.
|
|
The <code class="code">history</code>, <code class="code">getopts</code>, <code class="code">kill</code>, or <code class="code">pwd</code>
|
|
builtins, among others, could be implemented in separate utilities,
|
|
but they are more convenient to use as builtin commands.
|
|
All of the shell builtins are described in subsequent sections.
|
|
</p>
|
|
<p>While executing commands is essential, most of the power (and
|
|
complexity) of shells is due to their embedded programming languages.
|
|
Like any high-level language, the shell provides variables,
|
|
flow control constructs, quoting, and functions.
|
|
</p>
|
|
<p>Shells offer features geared specifically for
|
|
interactive use rather than to augment the programming language.
|
|
These interactive features include job control, command line
|
|
editing, command history and aliases.
|
|
This manual describes how Bash provides all of these features.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Definitions">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Basic-Shell-Features" accesskey="n" rel="next">Basic Shell Features</a>, Previous: <a href="#Introduction" accesskey="p" rel="prev">Introduction</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Definitions-1"><span>2 Definitions<a class="copiable-link" href="#Definitions-1"> ¶</a></span></h2>
|
|
<p>These definitions are used throughout the remainder of this manual.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a id="index-POSIX"></a><span><code class="code">POSIX</code><a class="copiable-link" href="#index-POSIX"> ¶</a></span></dt>
|
|
<dd><p>A family of open system standards based on Unix. Bash
|
|
is primarily concerned with the Shell and Utilities portion of the
|
|
<small class="sc">POSIX</small> 1003.1 standard.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">blank</code></dt>
|
|
<dd><p>A space or tab character.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">whitespace</code></dt>
|
|
<dd><p>A character belonging to the <code class="code">space</code> character class in the
|
|
current locale, or for which <code class="code">isspace()</code> returns true.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-builtin-1"></a><span><code class="code">builtin</code><a class="copiable-link" href="#index-builtin-1"> ¶</a></span></dt>
|
|
<dd><p>A command that is implemented internally by the shell itself, rather
|
|
than by an executable program somewhere in the file system.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-control-operator"></a><span><code class="code">control operator</code><a class="copiable-link" href="#index-control-operator"> ¶</a></span></dt>
|
|
<dd><p>A <code class="code">token</code> that performs a control function.
|
|
It is a <code class="code">newline</code> or one of the following:
|
|
‘<samp class="samp">||</samp>’, ‘<samp class="samp">&&</samp>’, ‘<samp class="samp">&</samp>’, ‘<samp class="samp">;</samp>’, ‘<samp class="samp">;;</samp>’, ‘<samp class="samp">;&</samp>’, ‘<samp class="samp">;;&</samp>’,
|
|
‘<samp class="samp">|</samp>’, ‘<samp class="samp">|&</samp>’, ‘<samp class="samp">(</samp>’, or ‘<samp class="samp">)</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-exit-status"></a><span><code class="code">exit status</code><a class="copiable-link" href="#index-exit-status"> ¶</a></span></dt>
|
|
<dd><p>The value returned by a command to its caller.
|
|
The value is restricted to eight bits, so the maximum value is 255.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-field"></a><span><code class="code">field</code><a class="copiable-link" href="#index-field"> ¶</a></span></dt>
|
|
<dd><p>A unit of text that is the result of one of the shell expansions.
|
|
After expansion, when executing a command, the resulting fields are
|
|
used as the command name and arguments.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-filename"></a><span><code class="code">filename</code><a class="copiable-link" href="#index-filename"> ¶</a></span></dt>
|
|
<dd><p>A string of characters used to identify a file.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-job"></a><span><code class="code">job</code><a class="copiable-link" href="#index-job"> ¶</a></span></dt>
|
|
<dd><p>A set of processes comprising a pipeline, and any processes descended
|
|
from it, that are all in the same process group.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-job-control"></a><span><code class="code">job control</code><a class="copiable-link" href="#index-job-control"> ¶</a></span></dt>
|
|
<dd><p>A mechanism by which users can selectively stop (suspend) and restart
|
|
(resume) execution of processes.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-metacharacter"></a><span><code class="code">metacharacter</code><a class="copiable-link" href="#index-metacharacter"> ¶</a></span></dt>
|
|
<dd><p>A character that, when unquoted, separates words.
|
|
A metacharacter is a <code class="code">space</code>, <code class="code">tab</code>, <code class="code">newline</code>,
|
|
or one of the following characters:
|
|
‘<samp class="samp">|</samp>’, ‘<samp class="samp">&</samp>’, ‘<samp class="samp">;</samp>’, ‘<samp class="samp">(</samp>’, ‘<samp class="samp">)</samp>’, ‘<samp class="samp"><</samp>’, or
|
|
‘<samp class="samp">></samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a class="index-entry-id" id="index-identifier"></a>
|
|
<a id="index-name"></a><span><code class="code">name</code><a class="copiable-link" href="#index-name"> ¶</a></span></dt>
|
|
<dd><p>A <code class="code">word</code> consisting solely of letters, numbers, and underscores,
|
|
and beginning with a letter or underscore.
|
|
<code class="code">Name</code>s are used as shell variable and function names.
|
|
Also referred to as an <code class="code">identifier</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-operator_002c-shell"></a><span><code class="code">operator</code><a class="copiable-link" href="#index-operator_002c-shell"> ¶</a></span></dt>
|
|
<dd><p>A <code class="code">control operator</code> or a <code class="code">redirection operator</code>.
|
|
See <a class="xref" href="#Redirections">Redirections</a>, for a list of redirection operators.
|
|
Operators contain at least one unquoted <code class="code">metacharacter</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-process-group"></a><span><code class="code">process group</code><a class="copiable-link" href="#index-process-group"> ¶</a></span></dt>
|
|
<dd><p>A collection of related processes each having the same process
|
|
group <small class="sc">ID</small>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-process-group-ID"></a><span><code class="code">process group ID</code><a class="copiable-link" href="#index-process-group-ID"> ¶</a></span></dt>
|
|
<dd><p>A unique identifier that represents a <code class="code">process group</code>
|
|
during its lifetime.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-reserved-word"></a><span><code class="code">reserved word</code><a class="copiable-link" href="#index-reserved-word"> ¶</a></span></dt>
|
|
<dd><p>A <code class="code">word</code> that has a special meaning to the shell.
|
|
Most reserved words introduce shell flow control constructs, such as
|
|
<code class="code">for</code> and <code class="code">while</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-return-status"></a><span><code class="code">return status</code><a class="copiable-link" href="#index-return-status"> ¶</a></span></dt>
|
|
<dd><p>A synonym for <code class="code">exit status</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-signal"></a><span><code class="code">signal</code><a class="copiable-link" href="#index-signal"> ¶</a></span></dt>
|
|
<dd><p>A mechanism by which a process may be notified by the kernel
|
|
of an event occurring in the system.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-special-builtin"></a><span><code class="code">special builtin</code><a class="copiable-link" href="#index-special-builtin"> ¶</a></span></dt>
|
|
<dd><p>A shell builtin command that has been classified as special by the
|
|
<small class="sc">POSIX</small> standard.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-token"></a><span><code class="code">token</code><a class="copiable-link" href="#index-token"> ¶</a></span></dt>
|
|
<dd><p>A sequence of characters considered a single unit by the shell.
|
|
It is either a <code class="code">word</code> or an <code class="code">operator</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-word"></a><span><code class="code">word</code><a class="copiable-link" href="#index-word"> ¶</a></span></dt>
|
|
<dd><p>A sequence of characters treated as a unit by the shell.
|
|
Words may not include unquoted <code class="code">metacharacters</code>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Basic-Shell-Features">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Builtin-Commands" accesskey="n" rel="next">Shell Builtin Commands</a>, Previous: <a href="#Definitions" accesskey="p" rel="prev">Definitions</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Basic-Shell-Features-1"><span>3 Basic Shell Features<a class="copiable-link" href="#Basic-Shell-Features-1"> ¶</a></span></h2>
|
|
<a class="index-entry-id" id="index-Bourne-shell"></a>
|
|
|
|
<p>Bash is an acronym for ‘<samp class="samp">Bourne-Again SHell</samp>’.
|
|
The Bourne shell is
|
|
the traditional Unix shell originally written by Stephen Bourne.
|
|
All of the Bourne shell builtin commands are available in Bash, and
|
|
the rules for evaluation and quoting are taken from the <small class="sc">POSIX</small>
|
|
specification for the “standard” Unix shell.
|
|
</p>
|
|
<p>This chapter briefly summarizes the shell’s “building blocks”:
|
|
commands, control structures, shell functions, shell <i class="i">parameters</i>,
|
|
shell expansions,
|
|
<i class="i">redirections</i>, which are a way to direct input and output from
|
|
and to named files, and how the shell executes commands.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Shell-Syntax" accesskey="1">Shell Syntax</a></li>
|
|
<li><a href="#Shell-Commands" accesskey="2">Shell Commands</a></li>
|
|
<li><a href="#Shell-Functions" accesskey="3">Shell Functions</a></li>
|
|
<li><a href="#Shell-Parameters" accesskey="4">Shell Parameters</a></li>
|
|
<li><a href="#Shell-Expansions" accesskey="5">Shell Expansions</a></li>
|
|
<li><a href="#Redirections" accesskey="6">Redirections</a></li>
|
|
<li><a href="#Executing-Commands" accesskey="7">Executing Commands</a></li>
|
|
<li><a href="#Shell-Scripts" accesskey="8">Shell Scripts</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Shell-Syntax">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Commands" accesskey="n" rel="next">Shell Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Syntax-1"><span>3.1 Shell Syntax<a class="copiable-link" href="#Shell-Syntax-1"> ¶</a></span></h3>
|
|
|
|
<p>When the shell reads input, it proceeds through a
|
|
sequence of operations. If the input indicates the beginning of a
|
|
comment, the shell ignores the comment symbol (‘<samp class="samp">#</samp>’), and the rest
|
|
of that line.
|
|
</p>
|
|
<p>Otherwise, roughly speaking, the shell reads its input and
|
|
divides the input into words and operators, employing the quoting rules
|
|
to select which meanings to assign various words and characters.
|
|
</p>
|
|
<p>The shell then parses these tokens into commands and other constructs,
|
|
removes the special meaning of certain words or characters, expands
|
|
others, redirects input and output as needed, executes the specified
|
|
command, waits for the command’s exit status, and makes that exit status
|
|
available for further inspection or processing.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Shell-Operation" accesskey="1">Shell Operation</a></li>
|
|
<li><a href="#Quoting" accesskey="2">Quoting</a></li>
|
|
<li><a href="#Comments" accesskey="3">Comments</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Shell-Operation">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Quoting" accesskey="n" rel="next">Quoting</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Shell-Operation-1"><span>3.1.1 Shell Operation<a class="copiable-link" href="#Shell-Operation-1"> ¶</a></span></h4>
|
|
|
|
<p>The following is a brief description of the shell’s operation when it
|
|
reads and executes a command.
|
|
Basically, the shell does the following:
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> Reads its input from a file (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>), from a string
|
|
supplied as an argument to the <samp class="option">-c</samp> invocation option
|
|
(see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>), or from the user’s terminal.
|
|
|
|
</li><li> Breaks the input into words and operators, obeying the quoting rules
|
|
described in <a class="ref" href="#Quoting">Quoting</a>.
|
|
These tokens are separated by <code class="code">metacharacters</code>.
|
|
This step performs alias expansion (see <a class="pxref" href="#Aliases">Aliases</a>).
|
|
|
|
</li><li> Parses the tokens into simple and compound commands
|
|
(see <a class="pxref" href="#Shell-Commands">Shell Commands</a>).
|
|
|
|
</li><li> Performs the various shell expansions (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>), breaking
|
|
the expanded tokens into lists of filenames (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>)
|
|
and commands and arguments.
|
|
|
|
</li><li> Performs any necessary redirections (see <a class="pxref" href="#Redirections">Redirections</a>) and removes
|
|
the redirection operators and their operands from the argument list.
|
|
|
|
</li><li> Executes the command (see <a class="pxref" href="#Executing-Commands">Executing Commands</a>).
|
|
|
|
</li><li> Optionally waits for the command to complete and collects its exit
|
|
status (see <a class="pxref" href="#Exit-Status">Exit Status</a>).
|
|
|
|
</li></ol>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Quoting">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Comments" accesskey="n" rel="next">Comments</a>, Previous: <a href="#Shell-Operation" accesskey="p" rel="prev">Shell Operation</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Quoting-1"><span>3.1.2 Quoting<a class="copiable-link" href="#Quoting-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-quoting"></a>
|
|
|
|
<p>Quoting is used to remove the special meaning of certain
|
|
characters or words to the shell.
|
|
Quoting can be used to
|
|
disable special treatment for special characters, to prevent
|
|
reserved words from being recognized as such, and to prevent
|
|
parameter expansion.
|
|
</p>
|
|
<p>Each of the shell metacharacters (see <a class="pxref" href="#Definitions">Definitions</a>)
|
|
has special meaning to the shell and must be quoted if it is to
|
|
represent itself.
|
|
</p>
|
|
<p>When the command history expansion facilities are being used
|
|
(see <a class="pxref" href="#History-Interaction">History Expansion</a>), the
|
|
<em class="dfn">history expansion</em> character, usually ‘<samp class="samp">!</samp>’, must be quoted
|
|
to prevent history expansion.
|
|
See <a class="xref" href="#Bash-History-Facilities">Bash History Facilities</a>, for more details concerning history
|
|
expansion.
|
|
</p>
|
|
<p>There are four quoting mechanisms: the
|
|
<em class="dfn">escape character</em>, single quotes, double quotes,
|
|
and dollar-single quotes.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Escape-Character" accesskey="1">Escape Character</a></li>
|
|
<li><a href="#Single-Quotes" accesskey="2">Single Quotes</a></li>
|
|
<li><a href="#Double-Quotes" accesskey="3">Double Quotes</a></li>
|
|
<li><a href="#ANSI_002dC-Quoting" accesskey="4">ANSI-C Quoting</a></li>
|
|
<li><a href="#Locale-Translation" accesskey="5">Locale-Specific Translation</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsubsection-level-extent" id="Escape-Character">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Single-Quotes" accesskey="n" rel="next">Single Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Escape-Character-1"><span>3.1.2.1 Escape Character<a class="copiable-link" href="#Escape-Character-1"> ¶</a></span></h4>
|
|
<p>A non-quoted backslash ‘<samp class="samp">\</samp>’ is the Bash escape character.
|
|
It preserves the literal value of the next character that follows,
|
|
removing any special meaning it has,
|
|
with the exception of <code class="code">newline</code>.
|
|
If a <code class="code">\newline</code> pair appears, and the backslash itself is not quoted,
|
|
the <code class="code">\newline</code> is treated as a line continuation (that is, it is
|
|
removed from the input stream and effectively ignored).
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsubsection-level-extent" id="Single-Quotes">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Double-Quotes" accesskey="n" rel="next">Double Quotes</a>, Previous: <a href="#Escape-Character" accesskey="p" rel="prev">Escape Character</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Single-Quotes-1"><span>3.1.2.2 Single Quotes<a class="copiable-link" href="#Single-Quotes-1"> ¶</a></span></h4>
|
|
|
|
<p>Enclosing characters in single quotes (‘<samp class="samp">'</samp>’) preserves the literal value
|
|
of each character within the quotes.
|
|
A single quote may not occur
|
|
between single quotes, even when preceded by a backslash.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsubsection-level-extent" id="Double-Quotes">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#ANSI_002dC-Quoting" accesskey="n" rel="next">ANSI-C Quoting</a>, Previous: <a href="#Single-Quotes" accesskey="p" rel="prev">Single Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Double-Quotes-1"><span>3.1.2.3 Double Quotes<a class="copiable-link" href="#Double-Quotes-1"> ¶</a></span></h4>
|
|
|
|
<p>Enclosing characters in double quotes (‘<samp class="samp">"</samp>’) preserves the literal value
|
|
of all characters within the quotes, with the exception of
|
|
‘<samp class="samp">$</samp>’, ‘<samp class="samp">`</samp>’, ‘<samp class="samp">\</samp>’,
|
|
and, when history expansion is enabled, ‘<samp class="samp">!</samp>’.
|
|
When the shell is in
|
|
<small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>),
|
|
the ‘<samp class="samp">!</samp>’ has no special meaning
|
|
within double quotes, even when history expansion is enabled.
|
|
The characters ‘<samp class="samp">$</samp>’ and ‘<samp class="samp">`</samp>’
|
|
retain their special meaning within double quotes (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>).
|
|
The backslash retains its special meaning only when followed by one of
|
|
the following characters:
|
|
‘<samp class="samp">$</samp>’, ‘<samp class="samp">`</samp>’, ‘<samp class="samp">"</samp>’, ‘<samp class="samp">\</samp>’, or <code class="code">newline</code>.
|
|
Within double quotes, backslashes that are followed by one of these
|
|
characters are removed.
|
|
Backslashes preceding characters without a
|
|
special meaning are left unmodified.
|
|
</p>
|
|
<p>A double quote may be quoted within double quotes by preceding it with
|
|
a backslash.
|
|
If enabled, history expansion will be performed unless an
|
|
‘<samp class="samp">!</samp>’
|
|
appearing in double quotes is escaped using a backslash.
|
|
The backslash preceding the ‘<samp class="samp">!</samp>’ is not removed.
|
|
</p>
|
|
<p>The special parameters ‘<samp class="samp">*</samp>’ and ‘<samp class="samp">@</samp>’ have special meaning
|
|
when in double quotes (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsubsection-level-extent" id="ANSI_002dC-Quoting">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Locale-Translation" accesskey="n" rel="next">Locale-Specific Translation</a>, Previous: <a href="#Double-Quotes" accesskey="p" rel="prev">Double Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="ANSI_002dC-Quoting-1"><span>3.1.2.4 ANSI-C Quoting<a class="copiable-link" href="#ANSI_002dC-Quoting-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-quoting_002c-ANSI"></a>
|
|
<a class="index-entry-id" id="index-dollar_002dsingle-quote-quoting"></a>
|
|
|
|
<p>Character sequences of the form <code class="code">$'<var class="var">string</var>'</code> are treated as
|
|
a special kind of single quotes.
|
|
The sequence expands to <var class="var">string</var>, with backslash-escaped characters
|
|
in <var class="var">string</var> replaced as specified by the ANSI C standard.
|
|
Backslash escape sequences, if present, are decoded as follows:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">\a</code></dt>
|
|
<dd><p>alert (bell)
|
|
</p></dd>
|
|
<dt><code class="code">\b</code></dt>
|
|
<dd><p>backspace
|
|
</p></dd>
|
|
<dt><code class="code">\e</code></dt>
|
|
<dt><code class="code">\E</code></dt>
|
|
<dd><p>An escape character (not in ANSI C).
|
|
</p></dd>
|
|
<dt><code class="code">\f</code></dt>
|
|
<dd><p>form feed
|
|
</p></dd>
|
|
<dt><code class="code">\n</code></dt>
|
|
<dd><p>newline
|
|
</p></dd>
|
|
<dt><code class="code">\r</code></dt>
|
|
<dd><p>carriage return
|
|
</p></dd>
|
|
<dt><code class="code">\t</code></dt>
|
|
<dd><p>horizontal tab
|
|
</p></dd>
|
|
<dt><code class="code">\v</code></dt>
|
|
<dd><p>vertical tab
|
|
</p></dd>
|
|
<dt><code class="code">\\</code></dt>
|
|
<dd><p>backslash
|
|
</p></dd>
|
|
<dt><code class="code">\'</code></dt>
|
|
<dd><p>single quote
|
|
</p></dd>
|
|
<dt><code class="code">\"</code></dt>
|
|
<dd><p>double quote
|
|
</p></dd>
|
|
<dt><code class="code">\?</code></dt>
|
|
<dd><p>question mark
|
|
</p></dd>
|
|
<dt><code class="code">\<var class="var">nnn</var></code></dt>
|
|
<dd><p>The eight-bit character whose value is the octal value <var class="var">nnn</var>
|
|
(one to three octal digits).
|
|
</p></dd>
|
|
<dt><code class="code">\x<var class="var">HH</var></code></dt>
|
|
<dd><p>The eight-bit character whose value is the hexadecimal value <var class="var">HH</var>
|
|
(one or two hex digits).
|
|
</p></dd>
|
|
<dt><code class="code">\u<var class="var">HHHH</var></code></dt>
|
|
<dd><p>The Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
|
|
<var class="var">HHHH</var> (one to four hex digits).
|
|
</p></dd>
|
|
<dt><code class="code">\U<var class="var">HHHHHHHH</var></code></dt>
|
|
<dd><p>The Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
|
|
<var class="var">HHHHHHHH</var> (one to eight hex digits).
|
|
</p></dd>
|
|
<dt><code class="code">\c<var class="var">x</var></code></dt>
|
|
<dd><p>A control-<var class="var">x</var> character.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The expanded result is single-quoted, as if the dollar sign had not
|
|
been present.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsubsection-level-extent" id="Locale-Translation">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#ANSI_002dC-Quoting" accesskey="p" rel="prev">ANSI-C Quoting</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Locale_002dSpecific-Translation"><span>3.1.2.5 Locale-Specific Translation<a class="copiable-link" href="#Locale_002dSpecific-Translation"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-localization"></a>
|
|
<a class="index-entry-id" id="index-internationalization"></a>
|
|
<a class="index-entry-id" id="index-native-languages"></a>
|
|
<a class="index-entry-id" id="index-translation_002c-native-languages"></a>
|
|
|
|
<p>Prefixing a double-quoted string with a dollar sign (‘<samp class="samp">$</samp>’), such
|
|
as <code class="verb">$"hello, world"</code>,
|
|
causes the string to be translated according to the current locale.
|
|
The <code class="code">gettext</code> infrastructure performs the lookup and
|
|
translation, using the <code class="code">LC_MESSAGES</code>, <code class="code">TEXTDOMAINDIR</code>,
|
|
and <code class="code">TEXTDOMAIN</code> shell variables, as explained below.
|
|
See the gettext documentation for additional details not covered here.
|
|
If the current locale is <code class="code">C</code> or <code class="code">POSIX</code>,
|
|
if there are no translations available,
|
|
or if the string is not translated, the dollar sign is ignored,
|
|
and the string is treated as double-quoted as described above.
|
|
Since this is a form of double quoting, the string remains double-quoted
|
|
by default, whether or not it is translated and replaced.
|
|
If the <code class="code">noexpand_translation</code> option is enabled
|
|
using the <code class="code">shopt</code> builtin (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>),
|
|
translated strings are single-quoted instead of double-quoted.
|
|
</p>
|
|
<p>The rest of this section is a brief overview of how you use gettext to
|
|
create translations for strings in a shell script named <var class="var">scriptname</var>.
|
|
There are more details in the gettext documentation.
|
|
</p>
|
|
<hr>
|
|
<a class="node-id" id="Creating-Internationalized-Scripts"></a><div class="nav-panel">
|
|
<p>
|
|
[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="node"><span>Creating Internationalized Scripts<a class="copiable-link" href="#Creating-Internationalized-Scripts"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-internationalized-scripts"></a>
|
|
<a class="index-entry-id" id="index-string-translations"></a>
|
|
<p>Once you’ve marked the strings in your script
|
|
that you want to translate using $"…",
|
|
you create a gettext "template" file using the command
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">bash --dump-po-strings <var class="var">scriptname</var> > <var class="var">domain</var>.pot
|
|
</pre></div>
|
|
|
|
<p>The <var class="var">domain</var> is your <em class="dfn">message domain</em>.
|
|
It’s just an arbitrary string that’s used to identify the files gettext
|
|
needs, like a package or script name.
|
|
It needs to be unique among all
|
|
the message domains on systems where you install the translations, so
|
|
gettext knows which translations correspond to your script.
|
|
You’ll use the template file to create translations for each target language.
|
|
The template file conventionally has the suffix ‘<samp class="samp">.pot</samp>’.
|
|
</p>
|
|
<p>You copy this template file to a separate file for each target language
|
|
you want to support (called "PO" files, which use the suffix ‘<samp class="samp">.po</samp>’).
|
|
PO files use various naming conventions, but
|
|
when you are working to translate a template file into a particular
|
|
language, you first copy the template file to a file whose name is the
|
|
language you want to target, with the ‘<samp class="samp">.po</samp>’ suffix.
|
|
For instance, the Spanish translations of your strings would be
|
|
in a file named ‘<samp class="samp">es.po</samp>’, and to get started using a message
|
|
domain named "example," you would run
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">cp example.pot es.po
|
|
</pre></div>
|
|
|
|
<p>Ultimately, PO files are often named <var class="var">domain</var>.po and installed in
|
|
directories that contain multiple translation files for a particular language.
|
|
</p>
|
|
<p>Whichever naming convention you choose, you will need to translate the
|
|
strings in the PO files into the appropriate languages.
|
|
This has to be done manually.
|
|
</p>
|
|
<p>When you have the translations and PO files complete, you’ll use the
|
|
gettext tools to produce what are called "MO" files, which are compiled
|
|
versions of the PO files the gettext tools use to look up translations
|
|
efficiently.
|
|
MO files are also called "message catalog" files.
|
|
You use the <code class="command">msgfmt</code> program to do this.
|
|
For instance, if you had a file with Spanish translations, you could run
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">msgfmt -o es.mo es.po
|
|
</pre></div>
|
|
|
|
<p>to produce the corresponding MO file.
|
|
</p>
|
|
<p>Once you have the MO files, you decide where to install them and use the
|
|
<code class="code">TEXTDOMAINDIR</code> shell variable to tell the gettext tools where they are.
|
|
Make sure to use the same message domain to name the MO files
|
|
as you did for the PO files when you install them.
|
|
</p>
|
|
<a class="index-entry-id" id="index-LANG"></a>
|
|
<a class="index-entry-id" id="index-LC_005fMESSAGES"></a>
|
|
<a class="index-entry-id" id="index-TEXTDOMAIN"></a>
|
|
<a class="index-entry-id" id="index-TEXTDOMAINDIR"></a>
|
|
<p>Your users will use the <code class="env">LANG</code> or <code class="env">LC_MESSAGES</code> shell variables to
|
|
select the desired language.
|
|
</p>
|
|
<p>You set the <code class="env">TEXTDOMAIN</code> variable to the script’s message domain.
|
|
As above, you use the message domain to name your translation files.
|
|
</p>
|
|
<p>You, or possibly your users, set the <code class="env">TEXTDOMAINDIR</code> variable to the
|
|
name of a directory where the message catalog files are stored.
|
|
If you install the message files into the system’s standard message catalog
|
|
directory, you don’t need to worry about this variable.
|
|
</p>
|
|
<p>The directory where the message catalog files are stored varies between
|
|
systems.
|
|
Some use the message catalog selected by the <code class="env">LC_MESSAGES</code>
|
|
shell variable.
|
|
Others create the name of the message catalog from the value of the
|
|
<code class="env">TEXTDOMAIN</code> shell variable, possibly adding the ‘<samp class="samp">.mo</samp>’ suffix.
|
|
If you use the <code class="env">TEXTDOMAIN</code> variable, you may need to set the
|
|
<code class="env">TEXTDOMAINDIR</code> variable to the location of the message catalog files,
|
|
as above.
|
|
It’s common to use both variables in this fashion:
|
|
<code class="env">$TEXTDOMAINDIR</code>/<code class="env">$LC_MESSAGES</code>/LC_MESSAGES/<code class="env">$TEXTDOMAIN</code>.mo.
|
|
</p>
|
|
<p>If you used that last convention, and you wanted to store the message
|
|
catalog files with Spanish (es) and Esperanto (eo) translations into a
|
|
local directory you use for custom translation files, you could run
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">TEXTDOMAIN=example
|
|
TEXTDOMAINDIR=/usr/local/share/locale
|
|
|
|
cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo
|
|
cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo
|
|
</pre></div>
|
|
|
|
<p>When all of this is done, and the message catalog files containing the
|
|
compiled translations are installed in the correct location,
|
|
your users will be able to see translated strings
|
|
in any of the supported languages by setting the <code class="env">LANG</code> or
|
|
<code class="env">LC_MESSAGES</code> environment variables before running your script.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Comments">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Quoting" accesskey="p" rel="prev">Quoting</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Comments-1"><span>3.1.3 Comments<a class="copiable-link" href="#Comments-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-comments_002c-shell"></a>
|
|
|
|
<p>In a non-interactive shell, or an interactive shell in which the
|
|
<code class="code">interactive_comments</code> option to the <code class="code">shopt</code>
|
|
builtin is enabled (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>),
|
|
a word beginning with ‘<samp class="samp">#</samp>’ introduces a comment.
|
|
A word begins at the beginning of a line, after unquoted whitespace, or
|
|
after an operator.
|
|
The comment causes that word and all remaining characters on that line to
|
|
be ignored.
|
|
An interactive shell without the <code class="code">interactive_comments</code>
|
|
option enabled does not allow comments.
|
|
The <code class="code">interactive_comments</code>
|
|
option is enabled by default in interactive shells.
|
|
See <a class="xref" href="#Interactive-Shells">Interactive Shells</a>, for a description of what makes
|
|
a shell interactive.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Shell-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Functions" accesskey="n" rel="next">Shell Functions</a>, Previous: <a href="#Shell-Syntax" accesskey="p" rel="prev">Shell Syntax</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Commands-1"><span>3.2 Shell Commands<a class="copiable-link" href="#Shell-Commands-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-commands_002c-shell"></a>
|
|
|
|
<p>A simple shell command such as <code class="code">echo a b c</code> consists of the command
|
|
itself followed by arguments, separated by spaces.
|
|
</p>
|
|
<p>More complex shell commands are composed of simple commands arranged together
|
|
in a variety of ways: in a pipeline in which the output of one command
|
|
becomes the input of a second, in a loop or conditional construct, or in
|
|
some other grouping.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Reserved-Words" accesskey="1">Reserved Words</a></li>
|
|
<li><a href="#Simple-Commands" accesskey="2">Simple Commands</a></li>
|
|
<li><a href="#Pipelines" accesskey="3">Pipelines</a></li>
|
|
<li><a href="#Lists" accesskey="4">Lists of Commands</a></li>
|
|
<li><a href="#Compound-Commands" accesskey="5">Compound Commands</a></li>
|
|
<li><a href="#Coprocesses" accesskey="6">Coprocesses</a></li>
|
|
<li><a href="#GNU-Parallel" accesskey="7">GNU Parallel</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Reserved-Words">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Simple-Commands" accesskey="n" rel="next">Simple Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Reserved-Words-1"><span>3.2.1 Reserved Words<a class="copiable-link" href="#Reserved-Words-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-reserved-words"></a>
|
|
|
|
<p>Reserved words are words that have special meaning to the shell.
|
|
They are used to begin and end the shell’s compound commands.
|
|
</p>
|
|
<p>Reserved words are recognized as reserved when unquoted and either
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>the first word of a command;
|
|
</li><li>the first word following a reserved word
|
|
other than <code class="code">case</code>, <code class="code">for</code>, <code class="code">select</code>, or <code class="code">in</code>;
|
|
</li><li>the third word of a <code class="code">case</code> command
|
|
(only <code class="code">in</code> is valid);
|
|
</li><li>the third word of a <code class="code">for</code> or <code class="code">select</code>
|
|
command (only <code class="code">in</code> and <code class="code">do</code> are valid);
|
|
</li><li>following a control operator.
|
|
</li></ul>
|
|
|
|
<p>The shell will also recognize reserved words where the syntax of a command
|
|
specifically requires the reserved word as the only correct token.
|
|
</p>
|
|
<p>The following are reserved words:
|
|
</p>
|
|
<table class="multitable">
|
|
<tbody><tr><td width="10%"><code class="code">if</code></td><td width="10%"><code class="code">then</code></td><td width="10%"><code class="code">elif</code></td><td width="10%"><code class="code">else</code></td><td width="12%"><code class="code">fi</code></td><td width="10%"><code class="code">time</code></td></tr>
|
|
<tr><td width="10%"><code class="code">for</code></td><td width="10%"><code class="code">in</code></td><td width="10%"><code class="code">until</code></td><td width="10%"><code class="code">while</code></td><td width="12%"><code class="code">do</code></td><td width="10%"><code class="code">done</code></td></tr>
|
|
<tr><td width="10%"><code class="code">case</code></td><td width="10%"><code class="code">esac</code></td><td width="10%"><code class="code">coproc</code></td><td width="10%"><code class="code">select</code></td><td width="12%"><code class="code">function</code></td></tr>
|
|
<tr><td width="10%"><code class="code">{</code></td><td width="10%"><code class="code">}</code></td><td width="10%"><code class="code">[[</code></td><td width="10%"><code class="code">]]</code></td><td width="12%"><code class="code">!</code></td></tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Simple-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Pipelines" accesskey="n" rel="next">Pipelines</a>, Previous: <a href="#Reserved-Words" accesskey="p" rel="prev">Reserved Words</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Simple-Commands-1"><span>3.2.2 Simple Commands<a class="copiable-link" href="#Simple-Commands-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-commands_002c-simple"></a>
|
|
|
|
<p>A simple command is the kind of command that’s executed most often.
|
|
It’s just a sequence of words separated by <code class="code">blank</code>s, terminated
|
|
by one of the shell’s control operators (see <a class="pxref" href="#Definitions">Definitions</a>).
|
|
The first word generally specifies a command to be executed, with the
|
|
rest of the words being that command’s arguments.
|
|
</p>
|
|
<p>The return status (see <a class="pxref" href="#Exit-Status">Exit Status</a>) of a simple command is
|
|
its exit status as provided
|
|
by the <small class="sc">POSIX</small> 1003.1 <code class="code">waitpid</code> function, or 128+<var class="var">n</var> if
|
|
the command was terminated by signal <var class="var">n</var>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Pipelines">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Lists" accesskey="n" rel="next">Lists of Commands</a>, Previous: <a href="#Simple-Commands" accesskey="p" rel="prev">Simple Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Pipelines-1"><span>3.2.3 Pipelines<a class="copiable-link" href="#Pipelines-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-pipeline"></a>
|
|
<a class="index-entry-id" id="index-commands_002c-pipelines"></a>
|
|
|
|
<p>A <code class="code">pipeline</code> is a sequence of one or more commands separated by
|
|
one of the control operators ‘<samp class="samp">|</samp>’ or ‘<samp class="samp">|&</samp>’.
|
|
</p>
|
|
<a class="index-entry-id" id="index-time"></a>
|
|
<a class="index-entry-id" id="index-_0021"></a>
|
|
<a class="index-entry-id" id="index-command-timing"></a>
|
|
<p>The format for a pipeline is
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[time [-p]] [!] <var class="var">command1</var> [ | or |& <var class="var">command2</var> ] ...
|
|
</pre></div>
|
|
|
|
<p>The output of each command in the pipeline is connected via a pipe
|
|
to the input of the next command.
|
|
That is, each command reads the previous command’s output.
|
|
This connection is performed before any redirections specified by
|
|
<var class="var">command1</var>.
|
|
</p>
|
|
<p>If ‘<samp class="samp">|&</samp>’ is the pipeline operator,
|
|
<var class="var">command1</var>’s standard error, in addition to
|
|
its standard output, is connected to
|
|
<var class="var">command2</var>’s standard input through the pipe;
|
|
it is shorthand for <code class="code">2>&1 |</code>.
|
|
This implicit redirection of the standard error to the standard output is
|
|
performed after any redirections specified by <var class="var">command1</var>,
|
|
consistent with that shorthand.
|
|
</p>
|
|
<p>If the reserved word <code class="code">time</code> precedes the pipeline,
|
|
Bash prints timing statistics for the pipeline once it finishes.
|
|
The statistics currently consist of elapsed (wall-clock) time and
|
|
user and system time consumed by the command’s execution.
|
|
The <samp class="option">-p</samp> option changes the output format to that specified
|
|
by <small class="sc">POSIX</small>.
|
|
When the shell is in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>),
|
|
it does not recognize <code class="code">time</code> as a reserved word if the next
|
|
token begins with a ‘<samp class="samp">-</samp>’.
|
|
The value of the <code class="env">TIMEFORMAT</code> variable is a format string that
|
|
specifies how the timing information should be displayed.
|
|
See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a description of the available formats.
|
|
Providing <code class="code">time</code> as a reserved word permits the timing of
|
|
shell builtins, shell functions, and pipelines.
|
|
An external <code class="code">time</code> command cannot time these easily.
|
|
</p>
|
|
<p>When the shell is in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>),
|
|
you can use <code class="code">time</code> by itself as a simple command.
|
|
In this case, the shell displays the
|
|
total user and system time consumed by the shell and its children.
|
|
The <code class="env">TIMEFORMAT</code> variable specifies the format of the time information.
|
|
</p>
|
|
<p>If a pipeline is not executed asynchronously (see <a class="pxref" href="#Lists">Lists of Commands</a>), the
|
|
shell waits for all commands in the pipeline to complete.
|
|
</p>
|
|
<p>Each command in a multi-command pipeline,
|
|
where pipes are created,
|
|
is executed in its own <em class="dfn">subshell</em>, which is a
|
|
separate process (see <a class="pxref" href="#Command-Execution-Environment">Command Execution Environment</a>).
|
|
If the <code class="code">lastpipe</code> option is enabled using the <code class="code">shopt</code> builtin
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>),
|
|
and job control is not active,
|
|
the last element of a pipeline may be run by the shell process.
|
|
</p>
|
|
<p>The exit
|
|
status of a pipeline is the exit status of the last command in the
|
|
pipeline, unless the <code class="code">pipefail</code> option is enabled
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
If <code class="code">pipefail</code> is enabled, the pipeline’s return status is the
|
|
value of the last (rightmost) command to exit with a non-zero status,
|
|
or zero if all commands exit successfully.
|
|
If the reserved word ‘<samp class="samp">!</samp>’ precedes the pipeline, the
|
|
exit status is the logical negation of the exit status as described
|
|
above.
|
|
If a pipeline is not executed asynchronously (see <a class="pxref" href="#Lists">Lists of Commands</a>), the
|
|
shell waits for all commands in the pipeline to terminate before
|
|
returning a value.
|
|
The return status of an asynchronous pipeline is 0.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Lists">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Compound-Commands" accesskey="n" rel="next">Compound Commands</a>, Previous: <a href="#Pipelines" accesskey="p" rel="prev">Pipelines</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Lists-of-Commands"><span>3.2.4 Lists of Commands<a class="copiable-link" href="#Lists-of-Commands"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-commands_002c-lists"></a>
|
|
|
|
<p>A <code class="code">list</code> is a sequence of one or more <small class="sc">AND</small> or <small class="sc">OR</small> lists
|
|
separated by one of the operators
|
|
‘<samp class="samp">;</samp>’ or ‘<samp class="samp">&</samp>’, or a <code class="code">newline</code>,
|
|
and optionally terminated by one of those three characters.
|
|
</p>
|
|
<p><small class="sc">AND</small> and <small class="sc">OR</small> lists are sequences of one or more pipelines
|
|
separated by the control operators ‘<samp class="samp">&&</samp>’ and ‘<samp class="samp">||</samp>’,
|
|
respectively.
|
|
<small class="sc">AND</small> and <small class="sc">OR</small> lists are executed with left associativity.
|
|
</p>
|
|
<p>An <small class="sc">AND</small> list has the form
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted"><var class="var">command1</var> && <var class="var">command2</var>
|
|
</pre></div>
|
|
|
|
<p><var class="var">command2</var> is executed if, and only if, <var class="var">command1</var>
|
|
returns an exit status of zero (success).
|
|
</p>
|
|
<p>An <small class="sc">OR</small> list has the form
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted"><var class="var">command1</var> || <var class="var">command2</var>
|
|
</pre></div>
|
|
|
|
<p><var class="var">command2</var> is executed if, and only if, <var class="var">command1</var>
|
|
returns a non-zero exit status.
|
|
</p>
|
|
<p>The return status of
|
|
<small class="sc">AND</small> and <small class="sc">OR</small> lists is the exit status of the last command
|
|
executed in the list.
|
|
</p>
|
|
<p>Of these list operators, ‘<samp class="samp">&&</samp>’ and ‘<samp class="samp">||</samp>’
|
|
have equal precedence, followed by ‘<samp class="samp">;</samp>’ and ‘<samp class="samp">&</samp>’,
|
|
which have equal precedence.
|
|
</p>
|
|
<p>A sequence of one or more newlines may appear in a <code class="code">list</code>
|
|
to delimit commands, equivalent to a semicolon.
|
|
</p>
|
|
<p>If a command is terminated by the control operator ‘<samp class="samp">&</samp>’,
|
|
the shell executes the command asynchronously in a subshell.
|
|
This is known as executing the command in the <em class="dfn">background</em>,
|
|
and these are referred to as <em class="dfn">asynchronous</em> commands.
|
|
The shell does not wait for the command to finish, and the return
|
|
status is 0 (true).
|
|
When job control is not active (see <a class="pxref" href="#Job-Control">Job Control</a>),
|
|
the standard input for asynchronous commands, in the absence of any
|
|
explicit redirections, is redirected from <code class="code">/dev/null</code>.
|
|
</p>
|
|
<p>Commands separated or terminated by
|
|
‘<samp class="samp">;</samp>’ (or equivalent <code class="code">newline</code>)
|
|
are executed sequentially; the shell waits for each
|
|
command to terminate in turn.
|
|
</p>
|
|
<p>The return status of a list is the exit status of the last command executed.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Compound-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Coprocesses" accesskey="n" rel="next">Coprocesses</a>, Previous: <a href="#Lists" accesskey="p" rel="prev">Lists of Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Compound-Commands-1"><span>3.2.5 Compound Commands<a class="copiable-link" href="#Compound-Commands-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-commands_002c-compound"></a>
|
|
|
|
|
|
<p>Compound commands are the shell programming language constructs.
|
|
Each construct begins with a reserved word or control operator and is
|
|
terminated by a corresponding reserved word or operator.
|
|
Any redirections (see <a class="pxref" href="#Redirections">Redirections</a>) associated with a compound command
|
|
apply to all commands within that compound command unless explicitly overridden.
|
|
</p>
|
|
<p>In most cases a list of commands in a compound command’s description may be
|
|
separated from the rest of the command by one or more newlines, and may be
|
|
followed by a newline in place of a semicolon.
|
|
</p>
|
|
<p>Bash provides looping constructs, conditional commands, and mechanisms
|
|
to group commands and execute them as a unit.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Looping-Constructs" accesskey="1">Looping Constructs</a></li>
|
|
<li><a href="#Conditional-Constructs" accesskey="2">Conditional Constructs</a></li>
|
|
<li><a href="#Command-Grouping" accesskey="3">Grouping Commands</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsubsection-level-extent" id="Looping-Constructs">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Conditional-Constructs" accesskey="n" rel="next">Conditional Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Looping-Constructs-1"><span>3.2.5.1 Looping Constructs<a class="copiable-link" href="#Looping-Constructs-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-commands_002c-looping"></a>
|
|
|
|
<p>Bash supports the following looping constructs.
|
|
</p>
|
|
<p>Note that wherever a ‘<samp class="samp">;</samp>’ appears in the description of a
|
|
command’s syntax, it may be replaced with one or more newlines.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a class="index-entry-id" id="index-do"></a>
|
|
<a class="index-entry-id" id="index-done"></a>
|
|
<a id="index-until"></a><span><code class="code">until</code><a class="copiable-link" href="#index-until"> ¶</a></span></dt>
|
|
<dd><p>The syntax of the <code class="code">until</code> command is:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">until <var class="var">test-commands</var>; do <var class="var">consequent-commands</var>; done
|
|
</pre></div>
|
|
|
|
<p>Execute <var class="var">consequent-commands</var> as long as
|
|
<var class="var">test-commands</var> has an exit status which is not zero.
|
|
The return status is the exit status of the last command executed
|
|
in <var class="var">consequent-commands</var>, or zero if none was executed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-while"></a><span><code class="code">while</code><a class="copiable-link" href="#index-while"> ¶</a></span></dt>
|
|
<dd><p>The syntax of the <code class="code">while</code> command is:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">while <var class="var">test-commands</var>; do <var class="var">consequent-commands</var>; done
|
|
</pre></div>
|
|
|
|
<p>Execute <var class="var">consequent-commands</var> as long as
|
|
<var class="var">test-commands</var> has an exit status of zero.
|
|
The return status is the exit status of the last command executed
|
|
in <var class="var">consequent-commands</var>, or zero if none was executed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-for"></a><span><code class="code">for</code><a class="copiable-link" href="#index-for"> ¶</a></span></dt>
|
|
<dd><p>The syntax of the <code class="code">for</code> command is:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">for <var class="var">name</var> [ [in <var class="var">words</var> ...] ; ] do <var class="var">commands</var>; done
|
|
</pre></div>
|
|
|
|
<p>Expand <var class="var">words</var> (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>), and then
|
|
execute <var class="var">commands</var> once for each word
|
|
in the resultant list, with <var class="var">name</var> bound to the current word.
|
|
If ‘<samp class="samp">in <var class="var">words</var></samp>’ is not present, the <code class="code">for</code> command
|
|
executes the <var class="var">commands</var> once for each positional parameter that is
|
|
set, as if ‘<samp class="samp">in "$@"</samp>’ had been specified
|
|
(see <a class="pxref" href="#Special-Parameters">Special Parameters</a>).
|
|
</p>
|
|
<p>The return status is the exit status of the last command that executes.
|
|
If there are no items in the expansion of <var class="var">words</var>, no commands are
|
|
executed, and the return status is zero.
|
|
</p>
|
|
<p>There is an alternate form of the <code class="code">for</code> command which is similar to the
|
|
C language:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">for (( <var class="var">expr1</var> ; <var class="var">expr2</var> ; <var class="var">expr3</var> )) [;] do <var class="var">commands</var> ; done
|
|
</pre></div>
|
|
|
|
<p>First, evaluate the arithmetic expression <var class="var">expr1</var> according
|
|
to the rules described below (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
Then, repeatedly evaluate the arithmetic expression <var class="var">expr2</var>
|
|
until it evaluates to zero.
|
|
Each time <var class="var">expr2</var> evaluates to a non-zero value, execute <var class="var">commands</var>
|
|
and evaluate the arithmetic expression <var class="var">expr3</var>.
|
|
If any expression is omitted, it behaves as if it evaluates to 1.
|
|
The return value is the exit status of the last command in <var class="var">commands</var>
|
|
that is executed, or non-zero if any of the expressions is invalid.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Use the <code class="code">break</code> and <code class="code">continue</code> builtins
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
to control loop execution.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsubsection-level-extent" id="Conditional-Constructs">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Command-Grouping" accesskey="n" rel="next">Grouping Commands</a>, Previous: <a href="#Looping-Constructs" accesskey="p" rel="prev">Looping Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Conditional-Constructs-1"><span>3.2.5.2 Conditional Constructs<a class="copiable-link" href="#Conditional-Constructs-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-commands_002c-conditional"></a>
|
|
|
|
<dl class="table">
|
|
<dt><a class="index-entry-id" id="index-then"></a>
|
|
<a class="index-entry-id" id="index-else"></a>
|
|
<a class="index-entry-id" id="index-elif"></a>
|
|
<a class="index-entry-id" id="index-fi"></a>
|
|
<a id="index-if"></a><span><code class="code">if</code><a class="copiable-link" href="#index-if"> ¶</a></span></dt>
|
|
<dd><p>The syntax of the <code class="code">if</code> command is:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">if <var class="var">test-commands</var>; then
|
|
<var class="var">consequent-commands</var>;
|
|
[elif <var class="var">more-test-commands</var>; then
|
|
<var class="var">more-consequents</var>;]
|
|
[else <var class="var">alternate-consequents</var>;]
|
|
fi
|
|
</pre></div>
|
|
|
|
<p>The <var class="var">test-commands</var> list is executed, and if its return status is zero,
|
|
the <var class="var">consequent-commands</var> list is executed.
|
|
If <var class="var">test-commands</var> returns a non-zero status, each <code class="code">elif</code> list
|
|
is executed in turn, and if its exit status is zero,
|
|
the corresponding <var class="var">more-consequents</var> is executed and the
|
|
command completes.
|
|
If ‘<samp class="samp">else <var class="var">alternate-consequents</var></samp>’ is present, and
|
|
the final command in the final <code class="code">if</code> or <code class="code">elif</code> clause
|
|
has a non-zero exit status, then <var class="var">alternate-consequents</var> is executed.
|
|
The return status is the exit status of the last command executed, or
|
|
zero if no condition tested true.
|
|
</p>
|
|
</dd>
|
|
<dt><a class="index-entry-id" id="index-in"></a>
|
|
<a class="index-entry-id" id="index-esac"></a>
|
|
<a id="index-case"></a><span><code class="code">case</code><a class="copiable-link" href="#index-case"> ¶</a></span></dt>
|
|
<dd><p>The syntax of the <code class="code">case</code> command is:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">case <var class="var">word</var> in
|
|
[ [(] <var class="var">pattern</var> [| <var class="var">pattern</var>]...) <var class="var">command-list</var> ;;]...
|
|
esac
|
|
</pre></div>
|
|
|
|
<p><code class="code">case</code> will selectively execute the <var class="var">command-list</var> corresponding to
|
|
the first <var class="var">pattern</var> that matches <var class="var">word</var>,
|
|
proceeding from the first pattern to the last.
|
|
The match is performed according
|
|
to the rules described below in <a class="ref" href="#Pattern-Matching">Pattern Matching</a>.
|
|
The <var class="var">word</var> undergoes tilde expansion, parameter expansion, command
|
|
substitution, process substitution, arithmetic expansion, and quote removal
|
|
(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>)
|
|
before the shell attempts to match the pattern.
|
|
Each <var class="var">pattern</var> examined undergoes tilde expansion, parameter expansion,
|
|
command substitution, arithmetic expansion, process substitution, and
|
|
quote removal.
|
|
If the <code class="code">nocasematch</code> shell option
|
|
(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, the match is performed without regard to the case
|
|
of alphabetic characters.
|
|
</p>
|
|
<p>A pattern list is a set of one or more patterns separated by ‘<samp class="samp">|</samp>’,
|
|
and terminated by the ‘<samp class="samp">)</samp>’ operator.
|
|
A case <var class="var">clause</var> is a pattern list and an associated <var class="var">command-list</var>,
|
|
terminated by ‘<samp class="samp">;;</samp>’, ‘<samp class="samp">;&</samp>’, or ‘<samp class="samp">;;&</samp>’.
|
|
The terminator is optional for the last clause preceding <code class="code">esac</code>.
|
|
There may be an arbitrary number of <code class="code">case</code> clauses.
|
|
The first pattern that matches determines the
|
|
command-list that is executed.
|
|
It’s a common idiom to use ‘<samp class="samp">*</samp>’ as the final pattern to define the
|
|
default case, since that pattern will always match.
|
|
</p>
|
|
<p>Here is an example using <code class="code">case</code> in a script that could be used to
|
|
describe one interesting feature of an animal:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">echo -n "Enter the name of an animal: "
|
|
read ANIMAL
|
|
echo -n "The $ANIMAL has "
|
|
case $ANIMAL in
|
|
horse | dog | cat) echo -n "four";;
|
|
man | kangaroo ) echo -n "two";;
|
|
*) echo -n "an unknown number of";;
|
|
esac
|
|
echo " legs."
|
|
</pre></div>
|
|
|
|
|
|
<p>When a match is found, <code class="code">case</code> executes
|
|
the corresponding <var class="var">command-list</var>.
|
|
If the ‘<samp class="samp">;;</samp>’ operator terminates the case clause,
|
|
the <code class="code">case</code> command completes after the first pattern match.
|
|
Using the ‘<samp class="samp">;&</samp>’ terminator continues execution with
|
|
the <var class="var">command-list</var> associated with the next clause, if any.
|
|
Using the ‘<samp class="samp">;;&</samp>’ terminator causes the shell to test the pattern list
|
|
in the next clause, if any, and execute any associated <var class="var">command-list</var>
|
|
if the match succeeds,
|
|
continuing the case statement execution as if the pattern list had not matched.
|
|
</p>
|
|
<p>The return status is zero if no <var class="var">pattern</var> matches.
|
|
Otherwise, the return status is the exit status of the
|
|
last <var class="var">command-list</var> executed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-select"></a><span><code class="code">select</code><a class="copiable-link" href="#index-select"> ¶</a></span></dt>
|
|
<dd>
|
|
<p>The <code class="code">select</code> construct allows the easy generation of menus.
|
|
It has almost the same syntax as the <code class="code">for</code> command:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">select <var class="var">name</var> [in <var class="var">words</var> ...]; do <var class="var">commands</var>; done
|
|
</pre></div>
|
|
|
|
<p>First, expand the list of words following <code class="code">in</code>, generating a list
|
|
of items, and print the set of expanded words on the standard
|
|
error stream, each preceded by a number.
|
|
If the ‘<samp class="samp">in <var class="var">words</var></samp>’ is omitted, print the positional parameters,
|
|
as if ‘<samp class="samp">in "$@"</samp>’ had been specified.
|
|
<code class="code">select</code> then displays the <code class="env">PS3</code>
|
|
prompt and reads a line from the standard input.
|
|
If the line consists of a number corresponding to one of the displayed
|
|
words, then <code class="code">select</code> sets the value of <var class="var">name</var> to that word.
|
|
If the line is empty, <code class="code">select</code> displays the words and prompt again.
|
|
If <code class="code">EOF</code> is read, <code class="code">select</code> completes and returns 1.
|
|
Any other value read causes <var class="var">name</var> to be set to null.
|
|
The line read is saved in the variable <code class="env">REPLY</code>.
|
|
</p>
|
|
<p>The <var class="var">commands</var> are executed after each selection until a
|
|
<code class="code">break</code> command is executed, at which
|
|
point the <code class="code">select</code> command completes.
|
|
</p>
|
|
<p>Here is an example that allows the user to pick a filename from the
|
|
current directory, and displays the name and index of the file
|
|
selected.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">select fname in *;
|
|
do
|
|
echo you picked $fname \($REPLY\)
|
|
break;
|
|
done
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">((…))</code></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">(( <var class="var">expression</var> ))
|
|
</pre></div>
|
|
|
|
<p>The arithmetic <var class="var">expression</var> is evaluated according to the rules
|
|
described below (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
The <var class="var">expression</var> undergoes the same expansions
|
|
as if it were within double quotes,
|
|
but unescaped double quote characters
|
|
in <var class="var">expression</var> are not treated
|
|
specially and are removed.
|
|
Since this can potentially result in empty strings,
|
|
this command treats those as expressions that evaluate to 0.
|
|
If the value of the expression is non-zero, the return status is 0;
|
|
otherwise the return status is 1.
|
|
</p>
|
|
</dd>
|
|
<dt><a class="index-entry-id" id="index-_005d_005d"></a>
|
|
<a id="index-_005b_005b"></a><span><code class="code">[[…]]</code><a class="copiable-link" href="#index-_005b_005b"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">[[ <var class="var">expression</var> ]]
|
|
</pre></div>
|
|
|
|
<p>Evaluate the conditional expression <var class="var">expression</var> and
|
|
return a status of zero (true) or non-zero (false).
|
|
Expressions are composed of the primaries described below in
|
|
<a class="ref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>.
|
|
The words between the <code class="code">[[</code> and <code class="code">]]</code> do not undergo word splitting
|
|
and filename expansion.
|
|
The shell performs tilde expansion, parameter and
|
|
variable expansion, arithmetic expansion, command substitution, process
|
|
substitution, and quote removal on those words.
|
|
Conditional operators such as ‘<samp class="samp">-f</samp>’ must be unquoted to be recognized
|
|
as primaries.
|
|
</p>
|
|
<p>When used with <code class="code">[[</code>, the ‘<samp class="samp"><</samp>’ and ‘<samp class="samp">></samp>’ operators sort
|
|
lexicographically using the current locale.
|
|
</p>
|
|
<p>When the ‘<samp class="samp">==</samp>’ and ‘<samp class="samp">!=</samp>’ operators are used, the string to the
|
|
right of the operator is considered a pattern and matched according
|
|
to the rules described below in <a class="ref" href="#Pattern-Matching">Pattern Matching</a>,
|
|
as if the <code class="code">extglob</code> shell option were enabled.
|
|
The ‘<samp class="samp">=</samp>’ operator is identical to ‘<samp class="samp">==</samp>’.
|
|
If the <code class="code">nocasematch</code> shell option
|
|
(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, the match is performed without regard to the case
|
|
of alphabetic characters.
|
|
The return value is 0 if the string matches (‘<samp class="samp">==</samp>’) or does not
|
|
match (‘<samp class="samp">!=</samp>’) the pattern, and 1 otherwise.
|
|
</p>
|
|
<p>If you quote any part of the pattern,
|
|
using any of the shell’s quoting mechanisms,
|
|
the quoted portion is matched literally.
|
|
This means every character in the quoted portion matches itself,
|
|
instead of having any special pattern matching meaning.
|
|
</p>
|
|
<p>An additional binary operator, ‘<samp class="samp">=~</samp>’, is available, with the same
|
|
precedence as ‘<samp class="samp">==</samp>’ and ‘<samp class="samp">!=</samp>’.
|
|
When you use ‘<samp class="samp">=~</samp>’, the string to the right of the operator is considered
|
|
a <small class="sc">POSIX</small> extended regular expression pattern and matched accordingly
|
|
(using the <small class="sc">POSIX</small> <code class="code">regcomp</code> and <code class="code">regexec</code> interfaces
|
|
usually described in <i class="i">regex</i>(3)).
|
|
The return value is 0 if the string matches the pattern, and 1 if it does not.
|
|
If the regular expression is syntactically incorrect, the conditional
|
|
expression returns 2.
|
|
If the <code class="code">nocasematch</code> shell option
|
|
(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, the match is performed without regard to the case
|
|
of alphabetic characters.
|
|
</p>
|
|
<p>You can quote any part of the pattern
|
|
to force the quoted portion to be matched literally
|
|
instead of as a regular expression (see above).
|
|
If the pattern is stored in a shell variable, quoting the variable
|
|
expansion forces the entire pattern to be matched literally.
|
|
</p>
|
|
<p>The match succeeds if the pattern matches any part of the string.
|
|
If you want to force the pattern to match the entire string,
|
|
anchor the pattern using the ‘<samp class="samp">^</samp>’ and ‘<samp class="samp">$</samp>’ regular expression
|
|
operators.
|
|
</p>
|
|
<p>For example, the following will match a line
|
|
(stored in the shell variable <code class="code">line</code>)
|
|
if there is a sequence of characters anywhere in the value consisting of
|
|
any number, including zero, of
|
|
characters in the <code class="code">space</code> character class,
|
|
immediately followed by zero or one instances of ‘<samp class="samp">a</samp>’,
|
|
then a ‘<samp class="samp">b</samp>’:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">[[ $line =~ [[:space:]]*(a)?b ]]
|
|
</pre></div>
|
|
|
|
<p>That means values for <code class="code">line</code> like
|
|
‘<samp class="samp">aab</samp>’, ‘<samp class="samp"> aaaaaab</samp>’, ‘<samp class="samp">xaby</samp>’, and ‘<samp class="samp"> ab</samp>’
|
|
will all match,
|
|
as will a line containing a ‘<samp class="samp">b</samp>’ anywhere in its value.
|
|
</p>
|
|
<p>If you want to match a character that’s special to the regular expression
|
|
grammar (‘<samp class="samp">^$|[]()\.*+?</samp>’), it has to be quoted to remove its special
|
|
meaning.
|
|
This means that in the pattern ‘<samp class="samp">xxx.txt</samp>’, the ‘<samp class="samp">.</samp>’ matches any
|
|
character in the string (its usual regular expression meaning), but in the
|
|
pattern ‘<samp class="samp">"xxx.txt"</samp>’, it can only match a literal ‘<samp class="samp">.</samp>’.
|
|
</p>
|
|
<p>Likewise, if you want to include a character in your pattern that has a
|
|
special meaning to the regular expression grammar, you must make sure it’s
|
|
not quoted.
|
|
If you want to anchor a pattern at the beginning or end of the string,
|
|
for instance, you cannot quote the ‘<samp class="samp">^</samp>’ or ‘<samp class="samp">$</samp>’
|
|
characters using any form of shell quoting.
|
|
</p>
|
|
<p>If you want to match ‘<samp class="samp">initial string</samp>’ at the start of a line,
|
|
the following will work:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[[ $line =~ ^"initial string" ]]
|
|
</pre></div>
|
|
<p>but this will not:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[[ $line =~ "^initial string" ]]
|
|
</pre></div>
|
|
<p>because in the second example the ‘<samp class="samp">^</samp>’ is quoted and doesn’t have its
|
|
usual special meaning.
|
|
</p>
|
|
<p>It is sometimes difficult to specify a regular expression properly
|
|
without using quotes, or to keep track of the quoting used by regular
|
|
expressions while paying attention to
|
|
shell quoting and the shell’s quote removal.
|
|
Storing the regular expression in a shell variable is often a useful
|
|
way to avoid problems with quoting characters that are special to the
|
|
shell.
|
|
For example, the following is equivalent to the pattern used above:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">pattern='[[:space:]]*(a)?b'
|
|
[[ $line =~ $pattern ]]
|
|
</pre></div>
|
|
|
|
<p>Shell programmers should take special care with backslashes, since
|
|
backslashes are used by both the shell and regular expressions to remove
|
|
the special meaning from the following character.
|
|
This means that after the shell’s word expansions complete
|
|
(see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>),
|
|
any backslashes remaining in parts of the pattern
|
|
that were originally not quoted can remove the
|
|
special meaning of pattern characters.
|
|
If any part of the pattern is quoted, the shell does its best to ensure that
|
|
the regular expression treats those remaining backslashes as literal,
|
|
if they appeared in a quoted portion.
|
|
</p>
|
|
<p>The following two sets of commands are <em class="emph">not</em> equivalent:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">pattern='\.'
|
|
|
|
[[ . =~ $pattern ]]
|
|
[[ . =~ \. ]]
|
|
|
|
[[ . =~ "$pattern" ]]
|
|
[[ . =~ '\.' ]]
|
|
</pre></div>
|
|
|
|
<p>The first two matches will succeed, but the second two will not, because
|
|
in the second two the backslash will be part of the pattern to be matched.
|
|
In the first two examples, the pattern passed to the regular expression
|
|
parser is ‘<samp class="samp">\.</samp>’.
|
|
The backslash removes the special meaning from
|
|
‘<samp class="samp">.</samp>’, so the literal ‘<samp class="samp">.</samp>’ matches.
|
|
In the second two examples, the pattern passed to the regular expression
|
|
parser has the backslash quoted (e.g., ‘<samp class="samp">\\\.</samp>’), which will not match
|
|
the string, since it does not contain a backslash.
|
|
If the string in the first examples were anything other than ‘<samp class="samp">.</samp>’, say
|
|
‘<samp class="samp">a</samp>’, the pattern would not match, because the quoted ‘<samp class="samp">.</samp>’ in the
|
|
pattern loses its special meaning of matching any single character.
|
|
</p>
|
|
<p>Bracket expressions in regular expressions can be sources of errors as well,
|
|
since characters that are normally special in regular expressions
|
|
lose their special meanings between brackets.
|
|
However, you can use bracket expressions to match special pattern characters
|
|
without quoting them, so they are sometimes useful for this purpose.
|
|
</p>
|
|
<p>Though it might seem like a strange way to write it, the following pattern
|
|
will match a ‘<samp class="samp">.</samp>’ in the string:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">[[ . =~ [.] ]]
|
|
</pre></div>
|
|
|
|
<p>The shell performs any word expansions before passing the pattern
|
|
to the regular expression functions,
|
|
so you can assume that the shell’s quoting takes precedence.
|
|
As noted above, the regular expression parser will interpret any
|
|
unquoted backslashes remaining in the pattern after shell expansion
|
|
according to its own rules.
|
|
The intention is to avoid making shell programmers quote things twice
|
|
as much as possible, so shell quoting should be sufficient to quote
|
|
special pattern characters where that’s necessary.
|
|
</p>
|
|
<p>The array variable <code class="code">BASH_REMATCH</code> records which parts of the string
|
|
matched the pattern.
|
|
The element of <code class="code">BASH_REMATCH</code> with index 0 contains the portion of
|
|
the string matching the entire regular expression.
|
|
Substrings matched by parenthesized subexpressions within the regular
|
|
expression are saved in the remaining <code class="code">BASH_REMATCH</code> indices.
|
|
The element of <code class="code">BASH_REMATCH</code> with index <var class="var">n</var> is the portion of the
|
|
string matching the <var class="var">n</var>th parenthesized subexpression.
|
|
</p>
|
|
<p>Bash sets
|
|
<code class="code">BASH_REMATCH</code>
|
|
in the global scope; declaring it as a local variable will lead to
|
|
unexpected results.
|
|
</p>
|
|
<p>Expressions may be combined using the following operators, listed
|
|
in decreasing order of precedence:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">( <var class="var">expression</var> )</code></dt>
|
|
<dd><p>Returns the value of <var class="var">expression</var>.
|
|
This may be used to override the normal precedence of operators.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">! <var class="var">expression</var></code></dt>
|
|
<dd><p>True if <var class="var">expression</var> is false.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">expression1</var> && <var class="var">expression2</var></code></dt>
|
|
<dd><p>True if both <var class="var">expression1</var> and <var class="var">expression2</var> are true.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">expression1</var> || <var class="var">expression2</var></code></dt>
|
|
<dd><p>True if either <var class="var">expression1</var> or <var class="var">expression2</var> is true.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The <code class="code">&&</code> and <code class="code">||</code> operators do not evaluate <var class="var">expression2</var> if the
|
|
value of <var class="var">expression1</var> is sufficient to determine the return
|
|
value of the entire conditional expression.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsubsection-level-extent" id="Command-Grouping">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Conditional-Constructs" accesskey="p" rel="prev">Conditional Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Grouping-Commands"><span>3.2.5.3 Grouping Commands<a class="copiable-link" href="#Grouping-Commands"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-commands_002c-grouping"></a>
|
|
|
|
<p>Bash provides two ways to group a list of commands to be executed
|
|
as a unit. When commands are grouped, redirections may be applied
|
|
to the entire command list. For example, the output of all the
|
|
commands in the list may be redirected to a single stream.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">()</code></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">( <var class="var">list</var> )
|
|
</pre></div>
|
|
|
|
<p>Placing a list of commands between parentheses forces the shell to create
|
|
a subshell (see <a class="pxref" href="#Command-Execution-Environment">Command Execution Environment</a>), and each
|
|
of the commands in <var class="var">list</var> is executed in that subshell environment.
|
|
Since the <var class="var">list</var> is executed in a subshell, variable assignments do not
|
|
remain in effect after the subshell completes.
|
|
</p>
|
|
</dd>
|
|
<dt><a class="index-entry-id" id="index-_007d"></a>
|
|
<a id="index-_007b"></a><span><code class="code">{}</code><a class="copiable-link" href="#index-_007b"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">{ <var class="var">list</var>; }
|
|
</pre></div>
|
|
|
|
<p>Placing a list of commands between curly braces causes the list to
|
|
be executed in the current shell environment.
|
|
No subshell is created.
|
|
The semicolon (or newline) following <var class="var">list</var> is required.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>In addition to the creation of a subshell, there is a subtle difference
|
|
between these two constructs due to historical reasons. The braces
|
|
are reserved words, so they must be separated from the <var class="var">list</var>
|
|
by <code class="code">blank</code>s or other shell metacharacters.
|
|
The parentheses are operators, and are
|
|
recognized as separate tokens by the shell even if they are not separated
|
|
from the <var class="var">list</var> by whitespace.
|
|
</p>
|
|
<p>The exit status of both of these constructs is the exit status of
|
|
<var class="var">list</var>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Coprocesses">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#GNU-Parallel" accesskey="n" rel="next">GNU Parallel</a>, Previous: <a href="#Compound-Commands" accesskey="p" rel="prev">Compound Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Coprocesses-1"><span>3.2.6 Coprocesses<a class="copiable-link" href="#Coprocesses-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-coprocess"></a>
|
|
|
|
<p>A <code class="code">coprocess</code> is a shell command preceded by the <code class="code">coproc</code>
|
|
reserved word.
|
|
A coprocess is executed asynchronously in a subshell, as if the command
|
|
had been terminated with the ‘<samp class="samp">&</samp>’ control operator, with a two-way pipe
|
|
established between the executing shell and the coprocess.
|
|
</p>
|
|
<p>The syntax for a coprocess is:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">coproc [<var class="var">NAME</var>] <var class="var">command</var> [<var class="var">redirections</var>]
|
|
</pre></div>
|
|
|
|
<p>This creates a coprocess named <var class="var">NAME</var>.
|
|
<var class="var">command</var> may be either a simple command (see <a class="pxref" href="#Simple-Commands">Simple Commands</a>)
|
|
or a compound command (see <a class="pxref" href="#Compound-Commands">Compound Commands</a>).
|
|
<var class="var">NAME</var> is a shell variable name.
|
|
If <var class="var">NAME</var> is not supplied, the default name is <code class="code">COPROC</code>.
|
|
</p>
|
|
<p>The recommended form to use for a coprocess is
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">coproc <var class="var">NAME</var> { <var class="var">command</var>; }
|
|
</pre></div>
|
|
|
|
<p>This form is preferred because simple commands result in the coprocess
|
|
always being named <code class="code">COPROC</code>, and it is simpler to use and more complete
|
|
than the other compound commands.
|
|
</p>
|
|
<p>There are other forms of coprocesses:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">coproc <var class="var">NAME</var> <var class="var">compound-command</var>
|
|
coproc <var class="var">compound-command</var>
|
|
coproc <var class="var">simple-command</var>
|
|
</pre></div>
|
|
|
|
<p>If <var class="var">command</var> is a compound command, <var class="var">NAME</var> is optional. The
|
|
word following <code class="code">coproc</code> determines whether that word is interpreted
|
|
as a variable name: it is interpreted as <var class="var">NAME</var> if it is not a
|
|
reserved word that introduces a compound command.
|
|
If <var class="var">command</var> is a simple command, <var class="var">NAME</var> is not allowed; this
|
|
is to avoid confusion between <var class="var">NAME</var> and the first word of the simple
|
|
command.
|
|
</p>
|
|
<p>When the coprocess is executed, the shell creates an array variable
|
|
(see <a class="pxref" href="#Arrays">Arrays</a>)
|
|
named <var class="var">NAME</var> in the context of the executing shell.
|
|
The standard output of <var class="var">command</var>
|
|
is connected via a pipe to a file descriptor in the executing shell,
|
|
and that file descriptor is assigned to <var class="var">NAME</var>[0].
|
|
The standard input of <var class="var">command</var>
|
|
is connected via a pipe to a file descriptor in the executing shell,
|
|
and that file descriptor is assigned to <var class="var">NAME</var>[1].
|
|
This pipe is established before any redirections specified by the
|
|
command (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
The file descriptors can be utilized as arguments to shell commands
|
|
and redirections using standard word expansions.
|
|
Other than those created to execute command and process substitutions,
|
|
the file descriptors are not available in subshells.
|
|
</p>
|
|
<p>The process ID of the shell spawned to execute the coprocess is
|
|
available as the value of the variable <code class="env"><var class="var">NAME</var>_PID</code>.
|
|
The <code class="code">wait</code>
|
|
builtin may be used to wait for the coprocess to terminate.
|
|
</p>
|
|
<p>Since the coprocess is created as an asynchronous command,
|
|
the <code class="code">coproc</code> command always returns success.
|
|
The return status of a coprocess is the exit status of <var class="var">command</var>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="GNU-Parallel">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Coprocesses" accesskey="p" rel="prev">Coprocesses</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="GNU-Parallel-1"><span>3.2.7 GNU Parallel<a class="copiable-link" href="#GNU-Parallel-1"> ¶</a></span></h4>
|
|
|
|
<p>There are ways to run commands in parallel that are not built into Bash.
|
|
GNU Parallel is a tool to do just that.
|
|
</p>
|
|
<p>GNU Parallel, as its name suggests, can be used to build and run commands
|
|
in parallel. You may run the same command with different arguments, whether
|
|
they are filenames, usernames, hostnames, or lines read from files. GNU
|
|
Parallel provides shorthand references to many of the most common operations
|
|
(input lines, various portions of the input line, different ways to specify
|
|
the input source, and so on). Parallel can replace <code class="code">xargs</code> or feed
|
|
commands from its input sources to several different instances of Bash.
|
|
</p>
|
|
<p>For a complete description, refer to the GNU Parallel documentation, which
|
|
is available at
|
|
<a class="url" href="https://www.gnu.org/software/parallel/parallel_tutorial.html">https://www.gnu.org/software/parallel/parallel_tutorial.html</a>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Shell-Functions">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Parameters" accesskey="n" rel="next">Shell Parameters</a>, Previous: <a href="#Shell-Commands" accesskey="p" rel="prev">Shell Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Functions-1"><span>3.3 Shell Functions<a class="copiable-link" href="#Shell-Functions-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-shell-function"></a>
|
|
<a class="index-entry-id" id="index-functions_002c-shell"></a>
|
|
|
|
<p>Shell functions are a way to group commands for later execution
|
|
using a single name for the group.
|
|
They are executed just like a "regular" simple command.
|
|
When the name of a shell function is used as a simple command name,
|
|
the shell executes
|
|
the list of commands associated with that function name.
|
|
Shell functions are executed in the current
|
|
shell context; there is no new process created to interpret them.
|
|
</p>
|
|
<p>Functions are declared using this syntax:
|
|
<a class="index-entry-id" id="index-function"></a>
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><var class="var">fname</var> () <var class="var">compound-command</var> [ <var class="var">redirections</var> ]
|
|
</pre></div>
|
|
|
|
<p>or
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">function <var class="var">fname</var> [()] <var class="var">compound-command</var> [ <var class="var">redirections</var> ]
|
|
</pre></div>
|
|
|
|
<p>This defines a shell function named <var class="var">fname</var>.
|
|
The reserved word <code class="code">function</code> is optional.
|
|
If the <code class="code">function</code> reserved word is supplied, the parentheses are optional.
|
|
The <em class="dfn">body</em> of the function is the compound command
|
|
<var class="var">compound-command</var> (see <a class="pxref" href="#Compound-Commands">Compound Commands</a>).
|
|
That command is usually a <var class="var">list</var> enclosed between { and }, but
|
|
may be any compound command listed above.
|
|
If the <code class="code">function</code> reserved word is used, but the
|
|
parentheses are not supplied, the braces are recommended.
|
|
When the shell is in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>),
|
|
<var class="var">fname</var> must be a valid shell name and
|
|
may not be the same as one of the special builtins
|
|
(see <a class="pxref" href="#Special-Builtins">Special Builtins</a>).
|
|
When not in <small class="sc">POSIX</small> mode,
|
|
a function name can be any unquoted shell word that does
|
|
not contain ‘<samp class="samp">$</samp>’.
|
|
</p>
|
|
<p>Any redirections (see <a class="pxref" href="#Redirections">Redirections</a>) associated with the shell function
|
|
are performed when the function is executed.
|
|
Function definitions are deleted using the <samp class="option">-f</samp> option to the
|
|
<code class="code">unset</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
</p>
|
|
<p>The exit status of a function definition is zero unless a syntax error
|
|
occurs or a readonly function with the same name already exists.
|
|
When executed, the exit status of a function is the exit status of the
|
|
last command executed in the body.
|
|
</p>
|
|
<p>Note that for historical reasons, in the most common usage the curly braces
|
|
that surround the body of the function must be separated from the body by
|
|
<code class="code">blank</code>s or newlines.
|
|
This is because the braces are reserved words and are only recognized
|
|
as such when they are separated from the command list
|
|
by whitespace or another shell metacharacter.
|
|
When using the braces, the <var class="var">list</var> must be terminated by a semicolon,
|
|
a ‘<samp class="samp">&</samp>’, or a newline.
|
|
</p>
|
|
<p><var class="var">compound-command</var> is executed whenever <var class="var">fname</var> is specified
|
|
as the name of a simple command.
|
|
Functions are executed in the context of the
|
|
calling shell; there is no new process created to interpret
|
|
them (contrast this with the execution of a shell script).
|
|
</p>
|
|
<p>When a function is executed, the arguments to the
|
|
function become the positional parameters
|
|
during its execution (see <a class="pxref" href="#Positional-Parameters">Positional Parameters</a>).
|
|
The special parameter ‘<samp class="samp">#</samp>’ that expands to the number of
|
|
positional parameters
|
|
is updated to reflect the new set of positional parameters.
|
|
Special parameter <code class="code">0</code> is unchanged.
|
|
The first element of the <code class="env">FUNCNAME</code> variable is set to the
|
|
name of the function while the function is executing.
|
|
</p>
|
|
<p>All other aspects of the shell execution
|
|
environment are identical between a function and its caller
|
|
with these exceptions:
|
|
the <code class="env">DEBUG</code> and <code class="env">RETURN</code> traps
|
|
are not inherited unless the function has been given the
|
|
<code class="code">trace</code> attribute using the <code class="code">declare</code> builtin or
|
|
the <code class="code">-o functrace</code> option has been enabled with
|
|
the <code class="code">set</code> builtin,
|
|
(in which case all functions inherit the <code class="env">DEBUG</code> and <code class="env">RETURN</code> traps),
|
|
and the <code class="env">ERR</code> trap is not inherited unless the <code class="code">-o errtrace</code>
|
|
shell option has been enabled.
|
|
See <a class="xref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>, for the description of the
|
|
<code class="code">trap</code> builtin.
|
|
</p>
|
|
<p>The <code class="env">FUNCNEST</code> variable, if set to a numeric value greater
|
|
than 0, defines a maximum function nesting level. Function
|
|
invocations that exceed the limit cause the entire command to
|
|
abort.
|
|
</p>
|
|
<p>If the builtin command <code class="code">return</code>
|
|
is executed in a function, the function completes and
|
|
execution resumes with the next command after the function
|
|
call.
|
|
Any command associated with the <code class="code">RETURN</code> trap is executed
|
|
before execution resumes.
|
|
When a function completes, the values of the
|
|
positional parameters and the special parameter ‘<samp class="samp">#</samp>’
|
|
are restored to the values they had prior to the function’s
|
|
execution.
|
|
If <code class="code">return</code> is supplied a numeric argument,
|
|
that is the function’s return status; otherwise the function’s
|
|
return status is the exit status of the last command executed
|
|
before the <code class="code">return</code>.
|
|
</p>
|
|
<p>Variables local to the function are declared with the
|
|
<code class="code">local</code> builtin (<em class="dfn">local variables</em>).
|
|
Ordinarily, variables and their values
|
|
are shared between a function and its caller.
|
|
These variables are visible only to
|
|
the function and the commands it invokes.
|
|
This is particularly
|
|
important when a shell function calls other functions.
|
|
</p>
|
|
<p>In the following description, the <em class="dfn">current scope</em> is a currently-
|
|
executing function.
|
|
Previous scopes consist of that function’s caller and so on,
|
|
back to the "global" scope, where the shell is not executing
|
|
any shell function.
|
|
A local variable at the current local scope is a variable
|
|
declared using the <code class="code">local</code> or <code class="code">declare</code> builtins in the
|
|
function that is currently executing.
|
|
</p>
|
|
<p>Local variables "shadow"
|
|
variables with the same name declared at previous scopes.
|
|
For instance, a local variable declared in a function
|
|
hides variables with the same name declared at previous scopes,
|
|
including global variables: references and assignments
|
|
refer to the local variable, leaving the variables
|
|
at previous scopes unmodified.
|
|
When the function returns, the global variable is once again visible.
|
|
</p>
|
|
<p>The shell uses <em class="dfn">dynamic scoping</em> to control a variable’s visibility
|
|
within functions.
|
|
With dynamic scoping, visible variables and their values
|
|
are a result of the sequence of function calls that caused execution
|
|
to reach the current function.
|
|
The value of a variable that a function sees depends
|
|
on its value within its caller, if any, whether that caller is
|
|
the global scope or another shell function.
|
|
This is also the value that a local variable
|
|
declaration shadows, and the value that is restored when the function
|
|
returns.
|
|
</p>
|
|
<p>For example, if a variable <code class="env">var</code> is declared as local in function
|
|
<code class="code">func1</code>, and <code class="code">func1</code> calls another function <code class="code">func2</code>,
|
|
references to <code class="env">var</code> made from within <code class="code">func2</code> resolve to the
|
|
local variable <code class="env">var</code> from <code class="code">func1</code>, shadowing any global variable
|
|
named <code class="env">var</code>.
|
|
</p>
|
|
<p>The following script demonstrates this behavior.
|
|
When executed, the script displays
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">In func2, var = func1 local
|
|
</pre></div>
|
|
|
|
<div class="example">
|
|
<pre class="example-preformatted">func1()
|
|
{
|
|
local var='func1 local'
|
|
func2
|
|
}
|
|
|
|
func2()
|
|
{
|
|
echo "In func2, var = $var"
|
|
}
|
|
|
|
var=global
|
|
func1
|
|
</pre></div>
|
|
|
|
<p>The <code class="code">unset</code> builtin also acts using the same dynamic scope: if a
|
|
variable is local to the current scope, <code class="code">unset</code> unsets it;
|
|
otherwise the unset will refer to the variable found in any calling scope
|
|
as described above.
|
|
If a variable at the current local scope is unset, it remains so
|
|
(appearing as unset)
|
|
until it is reset in that scope or until the function returns.
|
|
Once the function returns, any instance of the variable at a previous
|
|
scope becomes visible.
|
|
If the unset acts on a variable at a previous scope, any instance of a
|
|
variable with that name that had been shadowed becomes visible
|
|
(see below how the <code class="code">localvar_unset</code> shell option changes this behavior).
|
|
</p>
|
|
<p>The <samp class="option">-f</samp> option to the <code class="code">declare</code> (<code class="code">typeset</code>)
|
|
builtin command (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>)
|
|
lists function names and definitions.
|
|
The <samp class="option">-F</samp> option to <code class="code">declare</code> or <code class="code">typeset</code>
|
|
lists the function names only
|
|
(and optionally the source file and line number, if the <code class="code">extdebug</code>
|
|
shell option is enabled).
|
|
Functions may be exported so that child shell processes
|
|
(those created when executing a separate shell invocation)
|
|
automatically have them defined with the
|
|
<samp class="option">-f</samp> option to the <code class="code">export</code> builtin
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
The <samp class="option">-f</samp> option to
|
|
the <code class="code">unset</code> builtin
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
deletes a function definition.
|
|
</p>
|
|
<p>Functions may be recursive.
|
|
The <code class="code">FUNCNEST</code> variable may be used to limit the depth of the
|
|
function call stack and restrict the number of function invocations.
|
|
By default, Bash places no limit on the number of recursive calls.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Shell-Parameters">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Expansions" accesskey="n" rel="next">Shell Expansions</a>, Previous: <a href="#Shell-Functions" accesskey="p" rel="prev">Shell Functions</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Parameters-1"><span>3.4 Shell Parameters<a class="copiable-link" href="#Shell-Parameters-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-parameters"></a>
|
|
<a class="index-entry-id" id="index-variable_002c-shell"></a>
|
|
<a class="index-entry-id" id="index-shell-variable"></a>
|
|
|
|
|
|
<p>A <em class="dfn">parameter</em> is an entity that stores values.
|
|
It can be a <code class="code">name</code>, a number, or one of the special characters
|
|
listed below.
|
|
A <em class="dfn">variable</em> is a parameter denoted by a <code class="code">name</code>.
|
|
A variable has a <code class="code">value</code> and zero or more <code class="code">attributes</code>.
|
|
Attributes are assigned using the <code class="code">declare</code> builtin command
|
|
(see the description of the <code class="code">declare</code> builtin in <a class="ref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
The <code class="code">export</code> and <code class="code">readonly</code> builtins assign specific attributes.
|
|
</p>
|
|
<p>A parameter is set if it has been assigned a value.
|
|
The null string is a valid value.
|
|
Once a variable is set, it may be unset only by using
|
|
the <code class="code">unset</code> builtin command.
|
|
</p>
|
|
<p>A variable is assigned to using a statement of the form
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><var class="var">name</var>=[<var class="var">value</var>]
|
|
</pre></div>
|
|
<p>If <var class="var">value</var> is not given, the variable is assigned the null string.
|
|
All <var class="var">value</var>s undergo tilde expansion, parameter and variable expansion,
|
|
command substitution, arithmetic expansion, and quote
|
|
removal (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
If the variable has its <code class="code">integer</code>
|
|
attribute set, then <var class="var">value</var>
|
|
is evaluated as an arithmetic expression even if the <code class="code">$((…))</code>
|
|
expansion is not used (see <a class="pxref" href="#Arithmetic-Expansion">Arithmetic Expansion</a>).
|
|
Word splitting and filename expansion are not performed.
|
|
Assignment statements may also appear as arguments to the
|
|
<code class="code">alias</code>,
|
|
<code class="code">declare</code>, <code class="code">typeset</code>, <code class="code">export</code>, <code class="code">readonly</code>,
|
|
and <code class="code">local</code> builtin commands (<em class="dfn">declaration commands</em>).
|
|
When in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>), these builtins may appear
|
|
in a command after one or more instances of the <code class="code">command</code> builtin
|
|
and retain these assignment statement properties.
|
|
For example,
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">command export var=value
|
|
</pre></div>
|
|
|
|
<p>In the context where an assignment statement is assigning a value
|
|
to a shell variable or array index (see <a class="pxref" href="#Arrays">Arrays</a>), the
|
|
‘<samp class="samp">+=</samp>’ operator appends to or adds to
|
|
the variable’s previous value.
|
|
This includes arguments to declaration commands such as
|
|
<code class="code">declare</code>
|
|
that accept assignment statements.
|
|
When ‘<samp class="samp">+=</samp>’
|
|
is applied to a variable for which the
|
|
<code class="code">integer</code> attribute has been set,
|
|
the variable’s current value and <var class="var">value</var> are each evaluated as
|
|
arithmetic expressions,
|
|
and the sum of the results is assigned as the variable’s value.
|
|
The current value is usually an integer constant, but may be an expression.
|
|
When ‘<samp class="samp">+=</samp>’
|
|
is applied to an array variable using compound assignment (see <a class="pxref" href="#Arrays">Arrays</a>),
|
|
the variable’s value is not unset
|
|
(as it is when using ‘<samp class="samp">=</samp>’),
|
|
and new values are appended to the array
|
|
beginning at one greater than the array’s maximum index (for indexed arrays),
|
|
or added as additional key-value pairs in an associative array.
|
|
When applied to a string-valued variable, <var class="var">value</var> is expanded and
|
|
appended to the variable’s value.
|
|
</p>
|
|
<p>A variable can be assigned the <code class="code">nameref</code> attribute using the
|
|
<samp class="option">-n</samp> option to the <code class="code">declare</code> or <code class="code">local</code> builtin commands
|
|
(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>)
|
|
to create a <em class="dfn">nameref</em>, or a reference to another variable.
|
|
This allows variables to be manipulated indirectly.
|
|
Whenever the nameref variable is referenced, assigned to, unset, or has
|
|
its attributes modified (other than using or changing the nameref
|
|
attribute itself), the
|
|
operation is actually performed on the variable specified by the nameref
|
|
variable’s value.
|
|
A nameref is commonly used within shell functions to refer to a variable
|
|
whose name is passed as an argument to the function.
|
|
For instance, if a variable name is passed to a shell function as its first
|
|
argument, running
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">declare -n ref=$1
|
|
</pre></div>
|
|
<p>inside the function creates a local nameref variable <code class="env">ref</code> whose value
|
|
is the variable name passed as the first argument.
|
|
References and assignments to <code class="env">ref</code>, and changes to its attributes,
|
|
are treated as references, assignments, and attribute modifications
|
|
to the variable whose name was passed as <code class="code">$1</code>.
|
|
</p>
|
|
<p>If the control variable in a <code class="code">for</code> loop has the nameref attribute,
|
|
the list of words can be a list of shell variables, and a name reference
|
|
is established for each word in the list, in turn, when the loop is
|
|
executed.
|
|
Array variables cannot be given the nameref attribute.
|
|
However, nameref variables can reference array variables and subscripted
|
|
array variables.
|
|
Namerefs can be unset using the <samp class="option">-n</samp> option to the <code class="code">unset</code> builtin
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
Otherwise, if <code class="code">unset</code> is executed with the name of a nameref variable
|
|
as an argument, the variable referenced by the nameref variable is unset.
|
|
</p>
|
|
<p>When the shell starts, it reads its environment and creates a shell
|
|
variable from each environment variable that has a valid name,
|
|
as described below (see <a class="pxref" href="#Environment">Environment</a>).
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Positional-Parameters" accesskey="1">Positional Parameters</a></li>
|
|
<li><a href="#Special-Parameters" accesskey="2">Special Parameters</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Positional-Parameters">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Special-Parameters" accesskey="n" rel="next">Special Parameters</a>, Up: <a href="#Shell-Parameters" accesskey="u" rel="up">Shell Parameters</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Positional-Parameters-1"><span>3.4.1 Positional Parameters<a class="copiable-link" href="#Positional-Parameters-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-parameters_002c-positional"></a>
|
|
|
|
<p>A <em class="dfn">positional parameter</em> is a parameter denoted by one or more
|
|
digits, other than the single digit <code class="code">0</code>.
|
|
Positional parameters are
|
|
assigned from the shell’s arguments when it is invoked,
|
|
and may be reassigned using the <code class="code">set</code> builtin command.
|
|
Positional parameter <code class="code">N</code> may be referenced as <code class="code">${N}</code>, or
|
|
as <code class="code">$N</code> when <code class="code">N</code> consists of a single digit.
|
|
Positional parameters may not be assigned to with assignment statements.
|
|
The <code class="code">set</code> and <code class="code">shift</code> builtins are used to set and
|
|
unset them (see <a class="pxref" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>).
|
|
The positional parameters are
|
|
temporarily replaced when a shell function is executed
|
|
(see <a class="pxref" href="#Shell-Functions">Shell Functions</a>).
|
|
</p>
|
|
<p>When a positional parameter consisting of more than a single
|
|
digit is expanded, it must be enclosed in braces.
|
|
Without braces, a digit following ‘<samp class="samp">$</samp>’ can only refer to
|
|
one of the first nine positional parameters ($1\-$9) or the
|
|
special parameter $0 (see below).
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Special-Parameters">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Positional-Parameters" accesskey="p" rel="prev">Positional Parameters</a>, Up: <a href="#Shell-Parameters" accesskey="u" rel="up">Shell Parameters</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Special-Parameters-1"><span>3.4.2 Special Parameters<a class="copiable-link" href="#Special-Parameters-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-parameters_002c-special"></a>
|
|
|
|
<p>The shell treats several parameters specially. These parameters may
|
|
only be referenced; assignment to them is not allowed.
|
|
Special parameters are denoted by one of the following characters.
|
|
</p>
|
|
<dl class="vtable">
|
|
<dt><a id="index-_002a"></a><span><code class="code">*</code><a class="copiable-link" href="#index-_002a"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_002a"></a>
|
|
<p>($*) Expands to the positional parameters, starting from one.
|
|
When the expansion is not within double quotes, each positional parameter
|
|
expands to a separate word.
|
|
In contexts where word expansions are performed, those words
|
|
are subject to further word splitting and filename expansion.
|
|
When the expansion occurs within double quotes, it expands to a single word
|
|
with the value of each parameter separated by the first character of the
|
|
<code class="env">IFS</code> variable.
|
|
That is, <code class="code">"$*"</code> is equivalent
|
|
to <code class="code">"$1<var class="var">c</var>$2<var class="var">c</var>…"</code>, where <var class="var">c</var>
|
|
is the first character of the value of the <code class="code">IFS</code>
|
|
variable.
|
|
If <code class="env">IFS</code> is unset, the parameters are separated by spaces.
|
|
If <code class="env">IFS</code> is null, the parameters are joined without intervening
|
|
separators.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-_0040"></a><span><code class="code">@</code><a class="copiable-link" href="#index-_0040"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_0040"></a>
|
|
<p>($@) Expands to the positional parameters, starting from one.
|
|
In contexts where word splitting is performed, this expands each
|
|
positional parameter to a separate word; if not within double
|
|
quotes, these words are subject to word splitting.
|
|
In contexts where word splitting is not performed,
|
|
such as the value portion of an assignment statement,
|
|
this expands to a single word
|
|
with each positional parameter separated by a space.
|
|
When the expansion occurs within double quotes,
|
|
and word splitting is performed,
|
|
each parameter expands to a separate word.
|
|
That is, <code class="code">"$@"</code> is equivalent to
|
|
<code class="code">"$1" "$2" …</code>.
|
|
If the double-quoted expansion occurs within a word, the expansion of
|
|
the first parameter is joined with the expansion of the
|
|
beginning part of the original
|
|
word, and the expansion of the last parameter is joined with the
|
|
expansion of the last part of the original word.
|
|
When there are no positional parameters, <code class="code">"$@"</code> and
|
|
<code class="code">$@</code>
|
|
expand to nothing (i.e., they are removed).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-_0023"></a><span><code class="code">#</code><a class="copiable-link" href="#index-_0023"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_0023"></a>
|
|
<p>($#) Expands to the number of positional parameters in decimal.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-_003f"></a><span><code class="code">?</code><a class="copiable-link" href="#index-_003f"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_003f"></a>
|
|
<p>($?) Expands to the exit status of the most recently executed command.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-_002d"></a><span><code class="code">-</code><a class="copiable-link" href="#index-_002d"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_002d"></a>
|
|
<p>($-, a hyphen.) Expands to the current option flags as specified upon
|
|
invocation, by the <code class="code">set</code>
|
|
builtin command, or those set by the shell itself
|
|
(such as the <samp class="option">-i</samp> option).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-_0024"></a><span><code class="code">$</code><a class="copiable-link" href="#index-_0024"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_0024"></a>
|
|
<p>($$) Expands to the process <small class="sc">ID</small> of the shell.
|
|
In a subshell, it expands to the process <small class="sc">ID</small> of the invoking shell,
|
|
not the subshell.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-_0021-1"></a><span><code class="code">!</code><a class="copiable-link" href="#index-_0021-1"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_0021"></a>
|
|
<p>($!) Expands to the process <small class="sc">ID</small> of the job most recently placed into the
|
|
background, whether executed as an asynchronous command or using
|
|
the <code class="code">bg</code> builtin (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-0"></a><span><code class="code">0</code><a class="copiable-link" href="#index-0"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_00240"></a>
|
|
<p>($0) Expands to the name of the shell or shell script.
|
|
This is set at shell initialization.
|
|
If Bash is invoked with a file of commands (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>),
|
|
<code class="code">$0</code> is set to the name of that file.
|
|
If Bash is started with the <samp class="option">-c</samp> option (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>),
|
|
then <code class="code">$0</code> is set to the first argument after the string to be
|
|
executed, if one is present.
|
|
Otherwise, it is set to the filename used to invoke Bash, as given by
|
|
argument zero.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Shell-Expansions">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Redirections" accesskey="n" rel="next">Redirections</a>, Previous: <a href="#Shell-Parameters" accesskey="p" rel="prev">Shell Parameters</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Expansions-1"><span>3.5 Shell Expansions<a class="copiable-link" href="#Shell-Expansions-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-expansion"></a>
|
|
|
|
<p>Expansion is performed on the command line after it has been split into
|
|
<code class="code">token</code>s.
|
|
Bash performs these expansions:
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>brace expansion
|
|
</li><li>tilde expansion
|
|
</li><li>parameter and variable expansion
|
|
</li><li>command substitution
|
|
</li><li>arithmetic expansion
|
|
</li><li>word splitting
|
|
</li><li>filename expansion
|
|
</li><li>quote removal
|
|
</li></ul>
|
|
|
|
|
|
<p>The order of expansions is:
|
|
brace expansion;
|
|
tilde expansion, parameter and variable expansion, arithmetic expansion,
|
|
and command substitution (done in a left-to-right fashion);
|
|
word splitting;
|
|
filename expansion;
|
|
and quote removal.
|
|
</p>
|
|
<p>On systems that can support it, there is an additional expansion
|
|
available: <em class="dfn">process substitution</em>.
|
|
This is performed at the
|
|
same time as tilde, parameter, variable, and arithmetic expansion and
|
|
command substitution.
|
|
</p>
|
|
<p><em class="dfn">Quote removal</em> is always performed last.
|
|
It removes quote characters present in the original word,
|
|
not ones resulting from one of the other expansions,
|
|
unless they have been quoted themselves.
|
|
See <a class="xref" href="#Quote-Removal">Quote Removal</a> for more details.
|
|
</p>
|
|
<p>Only brace expansion, word splitting, and filename expansion
|
|
can increase the number of words of the expansion; other expansions
|
|
expand a single word to a single word.
|
|
The only exceptions to this are the expansions of
|
|
<code class="code">"$@"</code> and <code class="code">$*</code> (see <a class="pxref" href="#Special-Parameters">Special Parameters</a>), and
|
|
<code class="code">"${<var class="var">name</var>[@]}"</code> and <code class="code">${<var class="var">name</var>[*]}</code>
|
|
(see <a class="pxref" href="#Arrays">Arrays</a>).
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Brace-Expansion" accesskey="1">Brace Expansion</a></li>
|
|
<li><a href="#Tilde-Expansion" accesskey="2">Tilde Expansion</a></li>
|
|
<li><a href="#Shell-Parameter-Expansion" accesskey="3">Shell Parameter Expansion</a></li>
|
|
<li><a href="#Command-Substitution" accesskey="4">Command Substitution</a></li>
|
|
<li><a href="#Arithmetic-Expansion" accesskey="5">Arithmetic Expansion</a></li>
|
|
<li><a href="#Process-Substitution" accesskey="6">Process Substitution</a></li>
|
|
<li><a href="#Word-Splitting" accesskey="7">Word Splitting</a></li>
|
|
<li><a href="#Filename-Expansion" accesskey="8">Filename Expansion</a></li>
|
|
<li><a href="#Quote-Removal" accesskey="9">Quote Removal</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Brace-Expansion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Tilde-Expansion" accesskey="n" rel="next">Tilde Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Brace-Expansion-1"><span>3.5.1 Brace Expansion<a class="copiable-link" href="#Brace-Expansion-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-brace-expansion"></a>
|
|
<a class="index-entry-id" id="index-expansion_002c-brace"></a>
|
|
|
|
<p>Brace expansion is a mechanism to generate arbitrary strings
|
|
sharing a common prefix and suffix, either of which can be empty.
|
|
This mechanism is similar to
|
|
<em class="dfn">filename expansion</em> (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>),
|
|
but the filenames generated need not exist.
|
|
Patterns to be brace expanded are formed from an optional <var class="var">preamble</var>,
|
|
followed by either a series of comma-separated strings or
|
|
a sequence expression between a pair of braces,
|
|
followed by an optional
|
|
<var class="var">postscript</var>.
|
|
The preamble is prefixed to each string contained within the braces,
|
|
and the postscript is then appended to each resulting string,
|
|
expanding left to right.
|
|
</p>
|
|
<p>Brace expansions may be nested.
|
|
The results of each expanded string are not sorted;
|
|
brace expansion preserves left to right order.
|
|
For example,
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">bash$ echo a{d,c,b}e
|
|
ade ace abe
|
|
</pre></div>
|
|
|
|
<p>A sequence expression takes the form
|
|
<code class="code"><var class="var">x</var>..<var class="var">y</var>[..<var class="var">incr</var>]</code>,
|
|
where <var class="var">x</var> and <var class="var">y</var> are either integers or letters,
|
|
and <var class="var">incr</var>, an optional increment, is an integer.
|
|
When integers are supplied, the expression expands to each number between
|
|
<var class="var">x</var> and <var class="var">y</var>, inclusive.
|
|
If either <var class="var">x</var> or <var class="var">y</var> begins with a zero,
|
|
each generated term will contain the same number of digits,
|
|
zero-padding where necessary.
|
|
When letters are supplied, the expression expands to each character
|
|
lexicographically between <var class="var">x</var> and <var class="var">y</var>, inclusive,
|
|
using the C locale.
|
|
Note that both <var class="var">x</var> and <var class="var">y</var> must be of the same type
|
|
(integer or letter).
|
|
When the increment is supplied, it is used as the difference between
|
|
each term.
|
|
The default increment is 1 or -1 as appropriate.
|
|
</p>
|
|
<p>Brace expansion is performed before any other expansions,
|
|
and any characters special to other expansions are preserved
|
|
in the result.
|
|
It is strictly textual.
|
|
Bash does not apply any syntactic interpretation to the context
|
|
of the expansion or the text between the braces.
|
|
</p>
|
|
<p>A correctly-formed brace expansion must contain unquoted opening
|
|
and closing braces, and at least one unquoted comma or a valid
|
|
sequence expression.
|
|
Any incorrectly formed brace expansion is left unchanged.
|
|
</p>
|
|
<p>A ‘<samp class="samp">{</samp>’ or ‘<samp class="samp">,</samp>’
|
|
may be quoted with a backslash to prevent its
|
|
being considered part of a brace expression.
|
|
To avoid conflicts with parameter expansion, the string ‘<samp class="samp">${</samp>’
|
|
is not considered eligible for brace expansion,
|
|
and inhibits brace expansion until the closing
|
|
‘<samp class="samp">}</samp>’.
|
|
</p>
|
|
<p>This construct is typically used as shorthand when the common
|
|
prefix of the strings to be generated is longer than in the
|
|
above example:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">mkdir /usr/local/src/bash/{old,new,dist,bugs}
|
|
</pre></div>
|
|
<p>or
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
|
|
</pre></div>
|
|
|
|
<p>Brace expansion introduces a slight incompatibility with
|
|
historical versions of
|
|
<code class="command">sh</code>.
|
|
<code class="command">sh</code>
|
|
does not treat opening or closing braces specially when they
|
|
appear as part of a word, and preserves them in the output.
|
|
Bash
|
|
removes braces from words as a consequence of brace
|
|
expansion.
|
|
For example, a word entered to
|
|
<code class="command">sh</code>
|
|
as
|
|
‘<samp class="samp">file{1,2}</samp>’
|
|
appears identically in the output.
|
|
Bash
|
|
outputs that word as
|
|
‘<samp class="samp">file1 file2</samp>’
|
|
after brace expansion.
|
|
Start
|
|
Bash
|
|
with the
|
|
<samp class="option">+B</samp>
|
|
option or disable brace expansion with the
|
|
<samp class="option">+B</samp>
|
|
option to the
|
|
<code class="code">set</code>
|
|
command
|
|
(see <a class="pxref" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>)
|
|
for strict
|
|
<code class="command">sh</code>
|
|
compatibility.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Tilde-Expansion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Parameter-Expansion" accesskey="n" rel="next">Shell Parameter Expansion</a>, Previous: <a href="#Brace-Expansion" accesskey="p" rel="prev">Brace Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Tilde-Expansion-1"><span>3.5.2 Tilde Expansion<a class="copiable-link" href="#Tilde-Expansion-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-tilde-expansion"></a>
|
|
<a class="index-entry-id" id="index-expansion_002c-tilde"></a>
|
|
|
|
<p>If a word begins with an unquoted tilde character (‘<samp class="samp">~</samp>’), all of the
|
|
characters up to the first unquoted slash (or all characters,
|
|
if there is no unquoted slash) are considered a <em class="dfn">tilde-prefix</em>.
|
|
If none of the characters in the tilde-prefix are quoted, the
|
|
characters in the tilde-prefix following the tilde are treated as a
|
|
possible <em class="dfn">login name</em>.
|
|
If this login name is the null string, the tilde is replaced with the
|
|
value of the <code class="env">HOME</code> shell variable.
|
|
If <code class="env">HOME</code> is unset, the tilde expands to
|
|
the home directory of the user executing the shell instead.
|
|
Otherwise, the tilde-prefix is replaced with the home directory
|
|
associated with the specified login name.
|
|
</p>
|
|
<p>If the tilde-prefix is ‘<samp class="samp">~+</samp>’, the value of
|
|
the shell variable <code class="env">PWD</code> replaces the tilde-prefix.
|
|
If the tilde-prefix is ‘<samp class="samp">~-</samp>’, the shell substitutes
|
|
the value of the shell variable
|
|
<code class="env">OLDPWD</code>, if it is set.
|
|
</p>
|
|
<p>If the characters following the tilde in the tilde-prefix consist of a
|
|
number <var class="var">N</var>, optionally prefixed by a ‘<samp class="samp">+</samp>’ or a ‘<samp class="samp">-</samp>’,
|
|
the tilde-prefix is replaced with the
|
|
corresponding element from the directory stack, as it would be displayed
|
|
by the <code class="code">dirs</code> builtin invoked with the characters following tilde
|
|
in the tilde-prefix as an argument (see <a class="pxref" href="#The-Directory-Stack">The Directory Stack</a>).
|
|
If the tilde-prefix, sans the tilde, consists of a number without a
|
|
leading ‘<samp class="samp">+</samp>’ or ‘<samp class="samp">-</samp>’, tilde expansion assumes ‘<samp class="samp">+</samp>’.
|
|
</p>
|
|
<p>The results of tilde expansion are treated as if they were quoted, so
|
|
the replacement is not subject to word splitting and filename expansion.
|
|
</p>
|
|
<p>If the login name is invalid, or the tilde expansion fails, the
|
|
tilde-prefix is left unchanged.
|
|
</p>
|
|
<p>Bash checks each variable assignment
|
|
for unquoted tilde-prefixes immediately
|
|
following a ‘<samp class="samp">:</samp>’ or the first ‘<samp class="samp">=</samp>’,
|
|
and performs tilde expansion in these cases.
|
|
Consequently, one may use filenames with tildes in assignments to
|
|
<code class="env">PATH</code>, <code class="env">MAILPATH</code>, and <code class="env">CDPATH</code>,
|
|
and the shell assigns the expanded value.
|
|
</p>
|
|
<p>The following table shows how Bash treats unquoted tilde-prefixes:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">~</code></dt>
|
|
<dd><p>The value of <code class="code">$HOME</code>.
|
|
</p></dd>
|
|
<dt><code class="code">~/foo</code></dt>
|
|
<dd><p><samp class="file">$HOME/foo</samp>
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">~fred/foo</code></dt>
|
|
<dd><p>The directory or file <code class="code">foo</code> in the home directory of the user
|
|
<code class="code">fred</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">~+/foo</code></dt>
|
|
<dd><p><samp class="file">$PWD/foo</samp>
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">~-/foo</code></dt>
|
|
<dd><p><samp class="file">${OLDPWD-'~-'}/foo</samp>
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">~<var class="var">N</var></code></dt>
|
|
<dd><p>The string that would be displayed by ‘<samp class="samp">dirs +<var class="var">N</var></samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">~+<var class="var">N</var></code></dt>
|
|
<dd><p>The string that would be displayed by ‘<samp class="samp">dirs +<var class="var">N</var></samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">~-<var class="var">N</var></code></dt>
|
|
<dd><p>The string that would be displayed by ‘<samp class="samp">dirs -<var class="var">N</var></samp>’.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Bash also performs tilde expansion on words satisfying the conditions of
|
|
variable assignments (see <a class="pxref" href="#Shell-Parameters">Shell Parameters</a>)
|
|
when they appear as arguments to simple commands.
|
|
Bash does not do this, except for the declaration commands listed
|
|
above, when in <small class="sc">POSIX</small> mode.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Shell-Parameter-Expansion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Command-Substitution" accesskey="n" rel="next">Command Substitution</a>, Previous: <a href="#Tilde-Expansion" accesskey="p" rel="prev">Tilde Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Shell-Parameter-Expansion-1"><span>3.5.3 Shell Parameter Expansion<a class="copiable-link" href="#Shell-Parameter-Expansion-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-parameter-expansion"></a>
|
|
<a class="index-entry-id" id="index-expansion_002c-parameter"></a>
|
|
|
|
<p>The ‘<samp class="samp">$</samp>’ character introduces parameter expansion,
|
|
command substitution, or arithmetic expansion.
|
|
The parameter name
|
|
or symbol to be expanded may be enclosed in braces, which
|
|
are optional but serve to protect the variable to be expanded from
|
|
characters immediately following it which could be
|
|
interpreted as part of the name.
|
|
For example, if the first positional parameter has the value ‘<samp class="samp">a</samp>’,
|
|
then <code class="code">${11}</code> expands to the value of the eleventh positional
|
|
parameter, while <code class="code">$11</code> expands to ‘<samp class="samp">a1</samp>’.
|
|
</p>
|
|
<p>When braces are used, the matching ending brace is the first ‘<samp class="samp">}</samp>’
|
|
not escaped by a backslash or within a quoted string, and not within an
|
|
embedded arithmetic expansion, command substitution, or parameter
|
|
expansion.
|
|
</p>
|
|
<p>The basic form of parameter expansion is ${<var class="var">parameter</var>},
|
|
which substitutes the value of <var class="var">parameter</var>.
|
|
The <var class="var">parameter</var> is a shell parameter as described above
|
|
(see <a class="pxref" href="#Shell-Parameters">Shell Parameters</a>) or an array reference (see <a class="pxref" href="#Arrays">Arrays</a>).
|
|
The braces are required when <var class="var">parameter</var>
|
|
is a positional parameter with more than one digit,
|
|
or when <var class="var">parameter</var> is followed by a character that is not to be
|
|
interpreted as part of its name.
|
|
</p>
|
|
<p>If the first character of <var class="var">parameter</var> is an exclamation point (!),
|
|
and <var class="var">parameter</var> is not a nameref,
|
|
it introduces a level of indirection.
|
|
Bash uses the value formed by expanding the rest of
|
|
<var class="var">parameter</var> as the new <var class="var">parameter</var>;
|
|
this new parameter is then
|
|
expanded and that value is used
|
|
in the rest of the expansion, rather
|
|
than the expansion of the original <var class="var">parameter</var>.
|
|
This is known as <code class="code">indirect expansion</code>.
|
|
The value is subject to tilde expansion,
|
|
parameter expansion, command substitution, and arithmetic expansion.
|
|
If <var class="var">parameter</var> is a nameref, this expands to the name of the
|
|
variable referenced by <var class="var">parameter</var> instead of performing the
|
|
complete indirect expansion, for compatibility.
|
|
The exceptions to this are the expansions of ${!<var class="var">prefix</var>*}
|
|
and ${!<var class="var">name</var>[@]}
|
|
described below.
|
|
The exclamation point must immediately follow the left brace in order to
|
|
introduce indirection.
|
|
</p>
|
|
<p>In each of the cases below, <var class="var">word</var> is subject to tilde expansion,
|
|
parameter expansion, command substitution, and arithmetic expansion.
|
|
</p>
|
|
<p>When not performing substring expansion, using the forms described
|
|
below (e.g., ‘<samp class="samp">:-</samp>’), Bash tests for a parameter that is unset or null.
|
|
Omitting the colon results in a test only for a parameter that is unset.
|
|
Put another way, if the colon is included,
|
|
the operator tests for both <var class="var">parameter</var>’s existence and that its value
|
|
is not null; if the colon is omitted, the operator tests only for existence.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">${<var class="var">parameter</var>:−<var class="var">word</var>}</code></dt>
|
|
<dd><p>If <var class="var">parameter</var> is unset or null, the expansion of
|
|
<var class="var">word</var> is substituted.
|
|
Otherwise, the value of <var class="var">parameter</var> is substituted.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">$ v=123
|
|
$ echo ${v-unset}
|
|
123
|
|
$ echo ${v:-unset-or-null}
|
|
123
|
|
$ unset v
|
|
$ echo ${v-unset}
|
|
unset
|
|
$ v=
|
|
$ echo ${v-unset}
|
|
|
|
$ echo ${v:-unset-or-null}
|
|
unset-or-null
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>:=<var class="var">word</var>}</code></dt>
|
|
<dd><p>If <var class="var">parameter</var> is unset or null, the expansion of <var class="var">word</var>
|
|
is assigned to <var class="var">parameter</var>,
|
|
and the result of the expansion
|
|
is the final value of <var class="var">parameter</var>.
|
|
Positional parameters and special parameters may not be assigned
|
|
in this way.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">$ unset var
|
|
$ : ${var=DEFAULT}
|
|
$ echo $var
|
|
DEFAULT
|
|
$ var=
|
|
$ : ${var=DEFAULT}
|
|
$ echo $var
|
|
|
|
$ var=
|
|
$ : ${var:=DEFAULT}
|
|
$ echo $var
|
|
DEFAULT
|
|
$ unset var
|
|
$ : ${var:=DEFAULT}
|
|
$ echo $var
|
|
DEFAULT
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>:?<var class="var">word</var>}</code></dt>
|
|
<dd><p>If <var class="var">parameter</var>
|
|
is null or unset, the shell writes
|
|
the expansion of <var class="var">word</var> (or a message
|
|
to that effect if <var class="var">word</var>
|
|
is not present) to the standard error and, if it
|
|
is not interactive, exits with a non-zero status.
|
|
An interactive shell does not exit, but does not execute the command
|
|
associated with the expansion.
|
|
Otherwise, the value of <var class="var">parameter</var> is substituted.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">$ var=
|
|
$ : ${var:?var is unset or null}
|
|
bash: var: var is unset or null
|
|
$ echo ${var?var is unset}
|
|
|
|
$ unset var
|
|
$ : ${var?var is unset}
|
|
bash: var: var is unset
|
|
$ : ${var:?var is unset or null}
|
|
bash: var: var is unset or null
|
|
$ var=123
|
|
$ echo ${var:?var is unset or null}
|
|
123
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>:+<var class="var">word</var>}</code></dt>
|
|
<dd><p>If <var class="var">parameter</var>
|
|
is null or unset, nothing is substituted, otherwise the expansion of
|
|
<var class="var">word</var> is substituted.
|
|
The value of <var class="var">parameter</var> is not used.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">$ var=123
|
|
$ echo ${var:+var is set and not null}
|
|
var is set and not null
|
|
$ echo ${var+var is set}
|
|
var is set
|
|
$ var=
|
|
$ echo ${var:+var is set and not null}
|
|
|
|
$ echo ${var+var is set}
|
|
var is set
|
|
$ unset var
|
|
$ echo ${var+var is set}
|
|
|
|
$ echo ${var:+var is set and not null}
|
|
|
|
$
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>:<var class="var">offset</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>:<var class="var">offset</var>:<var class="var">length</var>}</code></dt>
|
|
<dd><p>This is referred to as Substring Expansion.
|
|
It expands to up to <var class="var">length</var> characters of the value of <var class="var">parameter</var>
|
|
starting at the character specified by <var class="var">offset</var>.
|
|
If <var class="var">parameter</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’, an indexed array subscripted by
|
|
‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’, or an associative array name, the results differ as
|
|
described below.
|
|
If :<var class="var">length</var> is omitted (the first form above), this
|
|
expands to the substring of the value of
|
|
<var class="var">parameter</var> starting at the character specified by <var class="var">offset</var>
|
|
and extending to the end of the value.
|
|
If <var class="var">offset</var> is omitted,
|
|
it is treated as 0.
|
|
If <var class="var">length</var> is omitted,
|
|
but the colon after <var class="var">offset</var> is present,
|
|
it is treated as 0.
|
|
<var class="var">length</var> and <var class="var">offset</var> are arithmetic expressions
|
|
(see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
</p>
|
|
<p>If <var class="var">offset</var> evaluates to a number less than zero, the value
|
|
is used as an offset in characters
|
|
from the end of the value of <var class="var">parameter</var>.
|
|
If <var class="var">length</var> evaluates to a number less than zero,
|
|
it is interpreted as an offset in characters
|
|
from the end of the value of <var class="var">parameter</var> rather than
|
|
a number of characters, and the expansion is the characters between
|
|
<var class="var">offset</var> and that result.
|
|
</p>
|
|
<p>Note that a negative offset must be separated from the colon by at least
|
|
one space to avoid being confused with the ‘<samp class="samp">:-</samp>’ expansion.
|
|
</p>
|
|
<p>Here are some examples illustrating substring expansion on parameters and
|
|
subscripted arrays:
|
|
</p>
|
|
<pre class="verbatim">$ string=01234567890abcdefgh
|
|
$ echo ${string:7}
|
|
7890abcdefgh
|
|
$ echo ${string:7:0}
|
|
|
|
$ echo ${string:7:2}
|
|
78
|
|
$ echo ${string:7:-2}
|
|
7890abcdef
|
|
$ echo ${string: -7}
|
|
bcdefgh
|
|
$ echo ${string: -7:0}
|
|
|
|
$ echo ${string: -7:2}
|
|
bc
|
|
$ echo ${string: -7:-2}
|
|
bcdef
|
|
$ set -- 01234567890abcdefgh
|
|
$ echo ${1:7}
|
|
7890abcdefgh
|
|
$ echo ${1:7:0}
|
|
|
|
$ echo ${1:7:2}
|
|
78
|
|
$ echo ${1:7:-2}
|
|
7890abcdef
|
|
$ echo ${1: -7}
|
|
bcdefgh
|
|
$ echo ${1: -7:0}
|
|
|
|
$ echo ${1: -7:2}
|
|
bc
|
|
$ echo ${1: -7:-2}
|
|
bcdef
|
|
$ array[0]=01234567890abcdefgh
|
|
$ echo ${array[0]:7}
|
|
7890abcdefgh
|
|
$ echo ${array[0]:7:0}
|
|
|
|
$ echo ${array[0]:7:2}
|
|
78
|
|
$ echo ${array[0]:7:-2}
|
|
7890abcdef
|
|
$ echo ${array[0]: -7}
|
|
bcdefgh
|
|
$ echo ${array[0]: -7:0}
|
|
|
|
$ echo ${array[0]: -7:2}
|
|
bc
|
|
$ echo ${array[0]: -7:-2}
|
|
bcdef
|
|
</pre>
|
|
<p>If <var class="var">parameter</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’, the result is <var class="var">length</var>
|
|
positional parameters beginning at <var class="var">offset</var>.
|
|
A negative <var class="var">offset</var> is taken relative to one greater than the greatest
|
|
positional parameter, so an offset of -1 evaluates to the last positional
|
|
parameter (or 0 if there are no positional parameters).
|
|
It is an expansion error if <var class="var">length</var> evaluates to a number less than zero.
|
|
</p>
|
|
<p>The following examples illustrate substring expansion using positional
|
|
parameters:
|
|
</p>
|
|
<pre class="verbatim">$ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
|
|
$ echo ${@:7}
|
|
7 8 9 0 a b c d e f g h
|
|
$ echo ${@:7:0}
|
|
|
|
$ echo ${@:7:2}
|
|
7 8
|
|
$ echo ${@:7:-2}
|
|
bash: -2: substring expression < 0
|
|
$ echo ${@: -7:2}
|
|
b c
|
|
$ echo ${@:0}
|
|
./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
|
|
$ echo ${@:0:2}
|
|
./bash 1
|
|
$ echo ${@: -7:0}
|
|
|
|
</pre>
|
|
<p>If <var class="var">parameter</var> is an indexed array name subscripted
|
|
by ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’, the result is the <var class="var">length</var>
|
|
members of the array beginning with <code class="code">${<var class="var">parameter</var>[<var class="var">offset</var>]}</code>.
|
|
A negative <var class="var">offset</var> is taken relative to one greater than the maximum
|
|
index of the specified array.
|
|
It is an expansion error if <var class="var">length</var> evaluates to a number less than zero.
|
|
</p>
|
|
<p>These examples show how you can use substring expansion with indexed
|
|
arrays:
|
|
</p>
|
|
<pre class="verbatim">$ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
|
|
$ echo ${array[@]:7}
|
|
7 8 9 0 a b c d e f g h
|
|
$ echo ${array[@]:7:2}
|
|
7 8
|
|
$ echo ${array[@]: -7:2}
|
|
b c
|
|
$ echo ${array[@]: -7:-2}
|
|
bash: -2: substring expression < 0
|
|
$ echo ${array[@]:0}
|
|
0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
|
|
$ echo ${array[@]:0:2}
|
|
0 1
|
|
$ echo ${array[@]: -7:0}
|
|
|
|
</pre>
|
|
<p>Substring expansion applied to an associative array produces undefined
|
|
results.
|
|
</p>
|
|
<p>Substring indexing is zero-based unless the positional parameters
|
|
are used, in which case the indexing starts at 1 by default.
|
|
If <var class="var">offset</var> is 0, and the positional parameters are used, <code class="code">$0</code> is
|
|
prefixed to the list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${!<var class="var">prefix</var>*}</code></dt>
|
|
<dt><code class="code">${!<var class="var">prefix</var>@}</code></dt>
|
|
<dd><p>Expands to the names of variables whose names begin with <var class="var">prefix</var>,
|
|
separated by the first character of the <code class="env">IFS</code> special variable.
|
|
When ‘<samp class="samp">@</samp>’ is used and the expansion appears within double quotes, each
|
|
variable name expands to a separate word.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${!<var class="var">name</var>[@]}</code></dt>
|
|
<dt><code class="code">${!<var class="var">name</var>[*]}</code></dt>
|
|
<dd><p>If <var class="var">name</var> is an array variable, expands to the list of array indices
|
|
(keys) assigned in <var class="var">name</var>.
|
|
If <var class="var">name</var> is not an array, expands to 0 if <var class="var">name</var> is set and null
|
|
otherwise.
|
|
When ‘<samp class="samp">@</samp>’ is used and the expansion appears within double quotes, each
|
|
key expands to a separate word.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${#<var class="var">parameter</var>}</code></dt>
|
|
<dd><p>Substitutes the length in characters of the value of <var class="var">parameter</var>.
|
|
If <var class="var">parameter</var> is ‘<samp class="samp">*</samp>’ or ‘<samp class="samp">@</samp>’, the value substituted
|
|
is the number of positional parameters.
|
|
If <var class="var">parameter</var> is an array name subscripted by ‘<samp class="samp">*</samp>’ or ‘<samp class="samp">@</samp>’,
|
|
the value substituted is the number of elements in the array.
|
|
If <var class="var">parameter</var>
|
|
is an indexed array name subscripted by a negative number, that number is
|
|
interpreted as relative to one greater than the maximum index of
|
|
<var class="var">parameter</var>, so negative indices count back from the end of the
|
|
array, and an index of -1 references the last element.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>#<var class="var">word</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>##<var class="var">word</var>}</code></dt>
|
|
<dd><p>The <var class="var">word</var>
|
|
is expanded to produce a pattern and matched
|
|
against the expanded value of <var class="var">parameter</var>
|
|
according to the rules
|
|
described below (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>).
|
|
If the pattern matches
|
|
the beginning of the expanded value of <var class="var">parameter</var>,
|
|
then the result of the expansion is the expanded value of <var class="var">parameter</var>
|
|
with the shortest matching pattern (the ‘<samp class="samp">#</samp>’ case) or the
|
|
longest matching pattern (the ‘<samp class="samp">##</samp>’ case) deleted.
|
|
If <var class="var">parameter</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the pattern removal operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var class="var">parameter</var> is an array variable subscripted with
|
|
‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the pattern removal operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>%<var class="var">word</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>%%<var class="var">word</var>}</code></dt>
|
|
<dd><p>The <var class="var">word</var>
|
|
is expanded to produce a pattern and matched
|
|
against the expanded value of <var class="var">parameter</var>
|
|
according to the rules
|
|
described below (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>).
|
|
If the pattern matches a trailing portion of the expanded value of
|
|
<var class="var">parameter</var>, then the result of the expansion is the value of
|
|
<var class="var">parameter</var> with the shortest matching pattern (the ‘<samp class="samp">%</samp>’ case)
|
|
or the longest matching pattern (the ‘<samp class="samp">%%</samp>’ case) deleted.
|
|
If <var class="var">parameter</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the pattern removal operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var class="var">parameter</var>
|
|
is an array variable subscripted with ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the pattern removal operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>/<var class="var">pattern</var>/<var class="var">string</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>//<var class="var">pattern</var>/<var class="var">string</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>/#<var class="var">pattern</var>/<var class="var">string</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>/%<var class="var">pattern</var>/<var class="var">string</var>}</code></dt>
|
|
<dd><p>The <var class="var">pattern</var> is expanded to produce a pattern
|
|
and matched against the expanded value of <var class="var">parameter</var>
|
|
as described below (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>).
|
|
The longest match of <var class="var">pattern</var>
|
|
in the expanded value is replaced with <var class="var">string</var>.
|
|
<var class="var">string</var> undergoes tilde expansion, parameter and variable expansion,
|
|
arithmetic expansion, command and process substitution, and quote removal.
|
|
</p>
|
|
<p>In the first form above, only the first match is replaced.
|
|
If there are two slashes separating <var class="var">parameter</var> and <var class="var">pattern</var>
|
|
(the second form above), all matches of <var class="var">pattern</var> are
|
|
replaced with <var class="var">string</var>.
|
|
If <var class="var">pattern</var> is preceded by ‘<samp class="samp">#</samp>’ (the third form above),
|
|
it must match at the beginning of the expanded value of <var class="var">parameter</var>.
|
|
If <var class="var">pattern</var> is preceded by ‘<samp class="samp">%</samp>’ (the fourth form above),
|
|
it must match at the end of the expanded value of <var class="var">parameter</var>.
|
|
</p>
|
|
<p>If the expansion of <var class="var">string</var> is null,
|
|
matches of <var class="var">pattern</var> are deleted
|
|
and the ‘<samp class="samp">/</samp>’ following <var class="var">pattern</var> may be omitted.
|
|
</p>
|
|
<p>If the <code class="code">patsub_replacement</code> shell option is enabled using <code class="code">shopt</code>
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>),
|
|
any unquoted instances of ‘<samp class="samp">&</samp>’ in <var class="var">string</var> are replaced with the
|
|
matching portion of <var class="var">pattern</var>.
|
|
This is intended to duplicate a common <code class="code">sed</code> idiom.
|
|
</p>
|
|
<p>Quoting any part of <var class="var">string</var> inhibits replacement in the
|
|
expansion of the quoted portion, including replacement strings stored
|
|
in shell variables.
|
|
Backslash escapes ‘<samp class="samp">&</samp>’ in <var class="var">string</var>; the backslash is removed
|
|
in order to permit a literal ‘<samp class="samp">&</samp>’ in the replacement string.
|
|
Users should take care if <var class="var">string</var> is double-quoted to avoid
|
|
unwanted interactions between the backslash and double-quoting, since
|
|
backslash has special meaning within double quotes.
|
|
Pattern substitution performs the check for unquoted ‘<samp class="samp">&</samp>’ after
|
|
expanding <var class="var">string</var>,
|
|
so users should ensure to properly quote any occurrences of ‘<samp class="samp">&</samp>’
|
|
they want to be taken literally in the replacement
|
|
and ensure any instances of ‘<samp class="samp">&</samp>’ they want to be replaced are unquoted.
|
|
</p>
|
|
<p>For instance,
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">var=abcdef
|
|
rep='& '
|
|
echo ${var/abc/& }
|
|
echo "${var/abc/& }"
|
|
echo ${var/abc/$rep}
|
|
echo "${var/abc/$rep}"
|
|
</pre></div>
|
|
|
|
<p>will display four lines of "abc def", while
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">var=abcdef
|
|
rep='& '
|
|
echo ${var/abc/\& }
|
|
echo "${var/abc/\& }"
|
|
echo ${var/abc/"& "}
|
|
echo ${var/abc/"$rep"}
|
|
</pre></div>
|
|
|
|
<p>will display four lines of "& def".
|
|
Like the pattern removal operators, double quotes surrounding the
|
|
replacement string quote the expanded characters, while double quotes
|
|
enclosing the entire parameter substitution do not, since
|
|
the expansion is performed in a
|
|
context that doesn’t take any enclosing double quotes into account.
|
|
</p>
|
|
<p>Since backslash can escape ‘<samp class="samp">&</samp>’, it can also escape a backslash in
|
|
the replacement string.
|
|
This means that ‘<samp class="samp">\\</samp>’ will insert a literal
|
|
backslash into the replacement, so these two <code class="code">echo</code> commands
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">var=abcdef
|
|
rep='\\&xyz'
|
|
echo ${var/abc/\\&xyz}
|
|
echo ${var/abc/$rep}
|
|
</pre></div>
|
|
|
|
<p>will both output ‘<samp class="samp">\abcxyzdef</samp>’.
|
|
</p>
|
|
<p>It should rarely be necessary to enclose only <var class="var">string</var> in double
|
|
quotes.
|
|
</p>
|
|
<p>If the <code class="code">nocasematch</code> shell option
|
|
(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, the match is performed without regard to the case
|
|
of alphabetic characters.
|
|
</p>
|
|
<p>If <var class="var">parameter</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the substitution operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var class="var">parameter</var>
|
|
is an array variable subscripted with ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the substitution operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>^<var class="var">pattern</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>^^<var class="var">pattern</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>,<var class="var">pattern</var>}</code></dt>
|
|
<dt><code class="code">${<var class="var">parameter</var>,,<var class="var">pattern</var>}</code></dt>
|
|
<dd><p>This expansion modifies the case of alphabetic characters in <var class="var">parameter</var>.
|
|
First, the <var class="var">pattern</var> is expanded to produce a pattern
|
|
as described below in <a class="ref" href="#Pattern-Matching">Pattern Matching</a>.
|
|
</p>
|
|
<p><code class="code">Bash</code>
|
|
then examines characters in the expanded value of <var class="var">parameter</var>
|
|
against <var class="var">pattern</var> as described below.
|
|
If a character matches the pattern, its case is converted.
|
|
The pattern should not attempt to match more than one character.
|
|
</p>
|
|
<p>Using
|
|
‘<samp class="samp">^</samp>’
|
|
converts lowercase letters matching <var class="var">pattern</var> to uppercase;
|
|
‘<samp class="samp">,</samp>’
|
|
converts matching uppercase letters to lowercase.
|
|
The
|
|
‘<samp class="samp">^</samp>’ and ‘<samp class="samp">,</samp>’ variants
|
|
examine the first character in the expanded value
|
|
and convert its case if it matches <var class="var">pattern</var>;
|
|
the
|
|
‘<samp class="samp">^^</samp>’ and ‘<samp class="samp">,,</samp>’ variants
|
|
examine all characters in the expanded value
|
|
and convert each one that matches <var class="var">pattern</var>.
|
|
If <var class="var">pattern</var> is omitted, it is treated like a ‘<samp class="samp">?</samp>’, which matches
|
|
every character.
|
|
</p>
|
|
<p>If <var class="var">parameter</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the case modification operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var class="var">parameter</var>
|
|
is an array variable subscripted with ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the case modification operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">${<var class="var">parameter</var>@<var class="var">operator</var>}</code></dt>
|
|
<dd><p>The expansion is either a transformation of the value of <var class="var">parameter</var>
|
|
or information about <var class="var">parameter</var> itself, depending on the value of
|
|
<var class="var">operator</var>. Each <var class="var">operator</var> is a single letter:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">U</code></dt>
|
|
<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with lowercase
|
|
alphabetic characters converted to uppercase.
|
|
</p></dd>
|
|
<dt><code class="code">u</code></dt>
|
|
<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with the first
|
|
character converted to uppercase, if it is alphabetic.
|
|
</p></dd>
|
|
<dt><code class="code">L</code></dt>
|
|
<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with uppercase
|
|
alphabetic characters converted to lowercase.
|
|
</p></dd>
|
|
<dt><code class="code">Q</code></dt>
|
|
<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> quoted in a
|
|
format that can be reused as input.
|
|
</p></dd>
|
|
<dt><code class="code">E</code></dt>
|
|
<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with backslash
|
|
escape sequences expanded as with the <code class="code">$'…'</code> quoting mechanism.
|
|
</p></dd>
|
|
<dt><code class="code">P</code></dt>
|
|
<dd><p>The expansion is a string that is the result of expanding the value of
|
|
<var class="var">parameter</var> as if it were a prompt string (see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>).
|
|
</p></dd>
|
|
<dt><code class="code">A</code></dt>
|
|
<dd><p>The expansion is a string in the form of
|
|
an assignment statement or <code class="code">declare</code> command that, if
|
|
evaluated, recreates <var class="var">parameter</var> with its attributes and value.
|
|
</p></dd>
|
|
<dt><code class="code">K</code></dt>
|
|
<dd><p>Produces a possibly-quoted version of the value of <var class="var">parameter</var>,
|
|
except that it prints the values of
|
|
indexed and associative arrays as a sequence of quoted key-value pairs
|
|
(see <a class="pxref" href="#Arrays">Arrays</a>).
|
|
The keys and values are quoted in a format that can be reused as input.
|
|
</p></dd>
|
|
<dt><code class="code">a</code></dt>
|
|
<dd><p>The expansion is a string consisting of flag values representing
|
|
<var class="var">parameter</var>’s attributes.
|
|
</p></dd>
|
|
<dt><code class="code">k</code></dt>
|
|
<dd><p>Like the ‘<samp class="samp">K</samp>’ transformation, but expands the keys and values of
|
|
indexed and associative arrays to separate words after word splitting.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If <var class="var">parameter</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var class="var">parameter</var>
|
|
is an array variable subscripted with ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
</p>
|
|
<p>The result of the expansion is subject to word splitting and filename
|
|
expansion as described below.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Command-Substitution">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Arithmetic-Expansion" accesskey="n" rel="next">Arithmetic Expansion</a>, Previous: <a href="#Shell-Parameter-Expansion" accesskey="p" rel="prev">Shell Parameter Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Command-Substitution-1"><span>3.5.4 Command Substitution<a class="copiable-link" href="#Command-Substitution-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-command-substitution"></a>
|
|
|
|
<p>Command substitution allows the output of a command to replace
|
|
the command itself.
|
|
The standard form of command substitution occurs when a command is
|
|
enclosed as follows:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">$(<var class="var">command</var>)
|
|
</pre></div>
|
|
<p>or (deprecated)
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">`<var class="var">command</var>`.
|
|
</pre></div>
|
|
|
|
<p>Bash performs command substitution by executing <var class="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 class="code">$(cat <var class="var">file</var>)</code> can be
|
|
replaced by the equivalent but faster <code class="code">$(< <var class="var">file</var>)</code>.
|
|
</p>
|
|
<p>With the old-style backquote form of substitution,
|
|
backslash retains its literal meaning except when followed by
|
|
‘<samp class="samp">$</samp>’, ‘<samp class="samp">`</samp>’, or ‘<samp class="samp">\</samp>’.
|
|
The first backquote not preceded by a backslash terminates the
|
|
command substitution.
|
|
When using the <code class="code">$(<var class="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-preformatted">${<var class="var">c</var> <var class="var">command</var>; }
|
|
</pre></div>
|
|
|
|
<p>which executes <var class="var">command</var> in the current execution environment
|
|
and captures its output, again with trailing newlines removed.
|
|
</p>
|
|
<p>The character <var class="var">c</var> following the open brace must be a space, tab,
|
|
newline, or ‘<samp class="samp">|</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.
|
|
</p>
|
|
<p>Any side effects of <var class="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 class="code">exit</code> builtin
|
|
exits the shell).
|
|
</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 class="code">return</code> builtin forces
|
|
<var class="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 ‘<samp class="samp">|</samp>’, the construct expands to the
|
|
value of the <code class="code">REPLY</code> shell variable after <var class="var">command</var> executes,
|
|
without removing any trailing newlines,
|
|
and the standard output of <var class="var">command</var> remains the same as in the
|
|
calling shell.
|
|
Bash creates <code class="code">REPLY</code> as an initially-unset local variable when
|
|
<var class="var">command</var> executes, and restores <code class="code">REPLY</code> to the value it had
|
|
before the command substitution after <var class="var">command</var> completes,
|
|
as with any local variable.
|
|
</p>
|
|
<p>For example, this construct expands to ‘<samp class="samp">12345</samp>’, and leaves the
|
|
shell variable <code class="code">X</code> unchanged in the current execution environment:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">
|
|
|
|
${ local X=12345 ; echo $X; }
|
|
</pre></div>
|
|
|
|
<p>(not declaring <code class="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
|
|
‘<samp class="samp">12345</samp>’:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">${| REPLY=12345; }
|
|
</pre></div>
|
|
|
|
<p>and restores <code class="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, Bash does not perform
|
|
word splitting and filename expansion on the results.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Arithmetic-Expansion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Process-Substitution" accesskey="n" rel="next">Process Substitution</a>, Previous: <a href="#Command-Substitution" accesskey="p" rel="prev">Command Substitution</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Arithmetic-Expansion-1"><span>3.5.5 Arithmetic Expansion<a class="copiable-link" href="#Arithmetic-Expansion-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-expansion_002c-arithmetic"></a>
|
|
<a class="index-entry-id" id="index-arithmetic-expansion"></a>
|
|
|
|
<p>Arithmetic expansion evaluates an arithmetic expression
|
|
and substitutes the result.
|
|
The format for arithmetic expansion is:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">$(( <var class="var">expression</var> ))
|
|
</pre></div>
|
|
|
|
<p>The <var class="var">expression</var> undergoes the same expansions
|
|
as if it were within double quotes,
|
|
but unescaped double quote characters
|
|
in <var class="var">expression</var> are not treated
|
|
specially and are removed.
|
|
All tokens in the expression undergo parameter and variable expansion,
|
|
command substitution, and quote removal.
|
|
The result is treated as the arithmetic expression to be evaluated.
|
|
Since the way Bash handles double quotes
|
|
can potentially result in empty strings,
|
|
arithmetic expansion treats
|
|
those as expressions that evaluate to 0.
|
|
Arithmetic expansions may be nested.
|
|
</p>
|
|
<p>The evaluation is performed according to the rules listed below
|
|
(see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
If the expression is invalid, Bash prints a message indicating
|
|
failure to the standard error,
|
|
does not perform the substitution,
|
|
and does not execute the command associated with the expansion.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Process-Substitution">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Word-Splitting" accesskey="n" rel="next">Word Splitting</a>, Previous: <a href="#Arithmetic-Expansion" accesskey="p" rel="prev">Arithmetic Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Process-Substitution-1"><span>3.5.6 Process Substitution<a class="copiable-link" href="#Process-Substitution-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-process-substitution"></a>
|
|
|
|
<p>Process substitution allows a process’s input or output to be
|
|
referred to using a filename.
|
|
It takes the form of
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><(<var class="var">list</var>)
|
|
</pre></div>
|
|
<p>or
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">>(<var class="var">list</var>)
|
|
</pre></div>
|
|
<p>The process <var class="var">list</var> is run asynchronously, and its input or output
|
|
appears as a filename.
|
|
This filename is
|
|
passed as an argument to the current command as the result of the
|
|
expansion.
|
|
</p>
|
|
<p>If the
|
|
<code class="code">>(<var class="var">list</var>)</code> form is used, writing to the file
|
|
provides input for <var class="var">list</var>.
|
|
If the
|
|
<code class="code"><(<var class="var">list</var>)</code> form is used, reading the file
|
|
obtains the output of <var class="var">list</var>.
|
|
Note that no space may appear between the <code class="code"><</code> or <code class="code">></code>
|
|
and the left parenthesis, otherwise the construct would be interpreted
|
|
as a redirection.
|
|
</p>
|
|
<p>Process substitution is supported on systems that support named
|
|
pipes (<small class="sc">FIFO</small>s) or the <samp class="file">/dev/fd</samp> method of naming open files.
|
|
</p>
|
|
<p>When available, process substitution is performed simultaneously with
|
|
parameter and variable expansion, command substitution, and arithmetic
|
|
expansion.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Word-Splitting">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Filename-Expansion" accesskey="n" rel="next">Filename Expansion</a>, Previous: <a href="#Process-Substitution" accesskey="p" rel="prev">Process Substitution</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Word-Splitting-1"><span>3.5.7 Word Splitting<a class="copiable-link" href="#Word-Splitting-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-word-splitting"></a>
|
|
|
|
<p>The shell scans the results of parameter expansion, command substitution,
|
|
and arithmetic expansion that did not occur within double quotes for
|
|
word splitting.
|
|
Words that were not expanded are not split.
|
|
</p>
|
|
<p>The shell treats each character of <code class="env">$IFS</code> as a delimiter,
|
|
and splits the results of the other expansions into fields
|
|
using these characters as field terminators.
|
|
</p>
|
|
<p>An <em class="dfn">IFS whitespace</em> character is whitespace as defined above
|
|
(see <a class="pxref" href="#Definitions">Definitions</a>) that appears in the value of <code class="env">IFS</code>.
|
|
Space, tab, and newline are always considered IFS whitespace, even
|
|
if they don’t appear in the locale’s <code class="code">space</code> category.
|
|
</p>
|
|
<p>If <code class="env">IFS</code> is unset, word splitting behaves as if its value were
|
|
<code class="code"><space><tab><newline></code>,
|
|
and treats these characters as IFS whitespace.
|
|
If the value of <code class="env">IFS</code> is null, no word splitting occurs,
|
|
but implicit null arguments (see below) are still removed.
|
|
</p>
|
|
<p>Word splitting begins by removing sequences of IFS whitespace characters
|
|
from the beginning and end of the results of the previous expansions,
|
|
then splits the remaining words.
|
|
</p>
|
|
<p>If the value of <code class="env">IFS</code> consists solely of IFS whitespace,
|
|
any sequence of IFS whitespace characters delimits a field,
|
|
so a field consists of characters that are not unquoted IFS
|
|
whitespace, and null fields result only from quoting.
|
|
</p>
|
|
<p>If <code class="env">IFS</code> contains a non-whitespace character, then any
|
|
character in the value of <code class="env">IFS</code> that is not IFS whitespace,
|
|
along with any adjacent IFS whitespace characters, delimits a field.
|
|
This means that adjacent non-IFS-whitespace delimiters produce a
|
|
null field.
|
|
A sequence of IFS whitespace characters also delimits a field.
|
|
</p>
|
|
<p>Explicit null arguments (<code class="code">""</code> or <code class="code">''</code>) are retained
|
|
and passed to commands as empty strings.
|
|
Unquoted implicit null arguments, resulting from the expansion of
|
|
parameters that have no values, are removed.
|
|
Expanding a parameter with no value within double quotes
|
|
produces a null field,
|
|
which is retained and passed to a command as an empty string.
|
|
</p>
|
|
<p>When a quoted null argument appears as part of a word whose expansion
|
|
is non-null, word splitting removes the null argument portion,
|
|
leaving the non-null expansion.
|
|
That is, the word
|
|
<code class="code">-d''</code> becomes <code class="code">-d</code> after word splitting and
|
|
null argument removal.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Filename-Expansion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Quote-Removal" accesskey="n" rel="next">Quote Removal</a>, Previous: <a href="#Word-Splitting" accesskey="p" rel="prev">Word Splitting</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Filename-Expansion-1"><span>3.5.8 Filename Expansion<a class="copiable-link" href="#Filename-Expansion-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-expansion_002c-filename"></a>
|
|
<a class="index-entry-id" id="index-expansion_002c-pathname"></a>
|
|
<a class="index-entry-id" id="index-filename-expansion"></a>
|
|
<a class="index-entry-id" id="index-pathname-expansion"></a>
|
|
|
|
<p>After word splitting, unless the <samp class="option">-f</samp> option has been set
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>), Bash scans each word for the characters
|
|
‘<samp class="samp">*</samp>’, ‘<samp class="samp">?</samp>’, and ‘<samp class="samp">[</samp>’.
|
|
If one of these characters appears, and is not quoted, then the word is
|
|
regarded as a <var class="var">pattern</var>,
|
|
and replaced with a sorted list of filenames matching the pattern
|
|
(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>),
|
|
subject to the value of the <code class="code">GLOBSORT</code> shell variable
|
|
(see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
</p>
|
|
<p>If no matching filenames are found,
|
|
and the shell option <code class="code">nullglob</code> is disabled, the word is left
|
|
unchanged.
|
|
If the <code class="code">nullglob</code> option is set, and no matches are found, the word
|
|
is removed.
|
|
If the <code class="code">failglob</code> shell option is set, and no matches are found,
|
|
Bash prints an error message and does not execute the command.
|
|
If the shell option <code class="code">nocaseglob</code> is enabled, the match is performed
|
|
without regard to the case of alphabetic characters.
|
|
</p>
|
|
<p>When a pattern is used for filename expansion, the character ‘<samp class="samp">.</samp>’
|
|
at the start of a filename or immediately following a slash
|
|
must be matched explicitly, unless the shell option <code class="code">dotglob</code> is set.
|
|
In order to match the filenames <samp class="file">.</samp> and <samp class="file">..</samp>,
|
|
the pattern must begin with ‘<samp class="samp">.</samp>’ (for example, ‘<samp class="samp">.?</samp>’),
|
|
even if <code class="code">dotglob</code> is set.
|
|
If the <code class="code">globskipdots</code> shell option is enabled, the filenames
|
|
<samp class="file">.</samp> and <samp class="file">..</samp> never match, even if the pattern begins
|
|
with a ‘<samp class="samp">.</samp>’.
|
|
When not matching filenames, the ‘<samp class="samp">.</samp>’ character is not treated specially.
|
|
</p>
|
|
<p>When matching a filename, the slash character must always be
|
|
matched explicitly by a slash in the pattern, but in other matching
|
|
contexts it can be matched by a special pattern character as described
|
|
below (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>).
|
|
</p>
|
|
<p>See the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>,
|
|
for a description of the <code class="code">nocaseglob</code>, <code class="code">nullglob</code>,
|
|
<code class="code">globskipdots</code>,
|
|
<code class="code">failglob</code>, and <code class="code">dotglob</code> options.
|
|
</p>
|
|
<p>The <code class="env">GLOBIGNORE</code>
|
|
shell variable may be used to restrict the set of file names matching a
|
|
pattern.
|
|
If <code class="env">GLOBIGNORE</code>
|
|
is set, each matching file name that also matches one of the patterns in
|
|
<code class="env">GLOBIGNORE</code> is removed from the list of matches.
|
|
If the <code class="code">nocaseglob</code> option is set, the matching against the patterns in
|
|
<code class="env">GLOBIGNORE</code> is performed without regard to case.
|
|
The filenames
|
|
<samp class="file">.</samp> and <samp class="file">..</samp>
|
|
are always ignored when <code class="env">GLOBIGNORE</code>
|
|
is set and not null.
|
|
However, setting <code class="env">GLOBIGNORE</code>
|
|
to a non-null value has the effect of enabling the
|
|
<code class="code">dotglob</code>
|
|
shell option, so all other filenames beginning with a
|
|
‘<samp class="samp">.</samp>’
|
|
match.
|
|
To get the old behavior of ignoring filenames beginning with a
|
|
‘<samp class="samp">.</samp>’,
|
|
make ‘<samp class="samp">.*</samp>’ one of the patterns in <code class="env">GLOBIGNORE</code>.
|
|
The <code class="code">dotglob</code> option is disabled when <code class="env">GLOBIGNORE</code>
|
|
is unset.
|
|
The <code class="code">GLOBIGNORE</code>
|
|
pattern matching honors the setting of the <code class="code">extglob</code> shell
|
|
option.
|
|
</p>
|
|
<p>The value of the
|
|
<code class="env">GLOBSORT</code>
|
|
shell variable controls how the results of pathname expansion are sorted,
|
|
as described below (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Pattern-Matching" accesskey="1">Pattern Matching</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsubsection-level-extent" id="Pattern-Matching">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Up: <a href="#Filename-Expansion" accesskey="u" rel="up">Filename Expansion</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsubsection" id="Pattern-Matching-1"><span>3.5.8.1 Pattern Matching<a class="copiable-link" href="#Pattern-Matching-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-pattern-matching"></a>
|
|
<a class="index-entry-id" id="index-matching_002c-pattern"></a>
|
|
|
|
<p>Any character that appears in a pattern, other than the special pattern
|
|
characters described below, matches itself.
|
|
The <small class="sc">NUL</small> character may not occur in a pattern.
|
|
A backslash escapes the following character; the
|
|
escaping backslash is discarded when matching.
|
|
The special pattern characters must be quoted if they are to be matched
|
|
literally.
|
|
</p>
|
|
<p>The special pattern characters have the following meanings:
|
|
</p><dl class="table">
|
|
<dt><code class="code">*</code></dt>
|
|
<dd><p>Matches any string, including the null string.
|
|
When the <code class="code">globstar</code> shell option is enabled, and ‘<samp class="samp">*</samp>’ is used in
|
|
a filename expansion context, two adjacent ‘<samp class="samp">*</samp>’s used as a single
|
|
pattern match all files and zero or more directories and
|
|
subdirectories.
|
|
If followed by a ‘<samp class="samp">/</samp>’, two adjacent ‘<samp class="samp">*</samp>’s match only
|
|
directories and subdirectories.
|
|
</p></dd>
|
|
<dt><code class="code">?</code></dt>
|
|
<dd><p>Matches any single character.
|
|
</p></dd>
|
|
<dt><code class="code">[…]</code></dt>
|
|
<dd><p>Matches any one of the characters enclosed between the brackets.
|
|
This is known as a <em class="dfn">bracket expression</em>
|
|
and matches a single character.
|
|
A pair of characters separated by a hyphen denotes a <em class="dfn">range expression</em>;
|
|
any character that falls between those two characters, inclusive,
|
|
using the current locale’s collating sequence and character set, matches.
|
|
If the first character following the
|
|
‘<samp class="samp">[</samp>’ is a ‘<samp class="samp">!</samp>’ or a ‘<samp class="samp">^</samp>’
|
|
then any character not within the range matches.
|
|
To match a ‘<samp class="samp">−</samp>’, include it as the first
|
|
or last character in the set.
|
|
To match a ‘<samp class="samp">]</samp>’, include it as the first
|
|
character in the set.
|
|
</p>
|
|
<p>The sorting order of characters in range expressions,
|
|
and the characters included in the range,
|
|
are determined by the current locale and the values of the
|
|
<code class="env">LC_COLLATE</code> and <code class="env">LC_ALL</code> shell variables, if set.
|
|
</p>
|
|
<p>For example, in the default C locale, ‘<samp class="samp">[a-dx-z]</samp>’ is equivalent to
|
|
‘<samp class="samp">[abcdxyz]</samp>’.
|
|
Many locales sort characters in dictionary order, and in these locales
|
|
‘<samp class="samp">[a-dx-z]</samp>’ is typically not equivalent to ‘<samp class="samp">[abcdxyz]</samp>’;
|
|
it might be equivalent to ‘<samp class="samp">[aBbCcDdxYyZz]</samp>’, for example.
|
|
To obtain
|
|
the traditional interpretation of ranges in bracket expressions, you can
|
|
force the use of the C locale by setting the <code class="env">LC_COLLATE</code> or
|
|
<code class="env">LC_ALL</code> environment variable to the value ‘<samp class="samp">C</samp>’, or enable the
|
|
<code class="code">globasciiranges</code> shell option.
|
|
</p>
|
|
<p>Within a bracket expression, <em class="dfn">character classes</em> can be specified
|
|
using the syntax
|
|
<code class="code">[:</code><var class="var">class</var><code class="code">:]</code>, where <var class="var">class</var> is one of the
|
|
following classes defined in the
|
|
<small class="sc">POSIX</small>
|
|
standard:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">alnum alpha ascii blank cntrl digit graph lower
|
|
print punct space upper word xdigit
|
|
</pre></div>
|
|
<p>A character class matches any character belonging to that class.
|
|
The <code class="code">word</code> character class matches letters, digits, and the character
|
|
‘<samp class="samp">_</samp>’.
|
|
</p>
|
|
<p>For instance, the following pattern will match any character belonging
|
|
to the <code class="code">space</code> character class in the current locale, then any
|
|
upper case letter or ‘<samp class="samp">!</samp>’, a dot, and finally any lower case letter
|
|
or a hyphen.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">[[:space:]][[:upper:]!].[-[:lower:]]
|
|
</pre></div>
|
|
|
|
<p>Within a bracket expression, an <em class="dfn">equivalence class</em> can be
|
|
specified using the syntax <code class="code">[=</code><var class="var">c</var><code class="code">=]</code>, which
|
|
matches all characters with the same collation weight (as defined
|
|
by the current locale) as the character <var class="var">c</var>.
|
|
</p>
|
|
<p>Within a bracket expression, the syntax <code class="code">[.</code><var class="var">symbol</var><code class="code">.]</code>
|
|
matches the collating symbol <var class="var">symbol</var>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If the <code class="code">extglob</code> shell option is enabled using the <code class="code">shopt</code>
|
|
builtin, the shell recognizes several extended pattern matching operators.
|
|
In the following description, a <var class="var">pattern-list</var> is a list of one
|
|
or more patterns separated by a ‘<samp class="samp">|</samp>’.
|
|
When matching filenames, the <code class="code">dotglob</code> shell option determines
|
|
the set of filenames that are tested, as described above.
|
|
Composite patterns may be formed using one or more of the following
|
|
sub-patterns:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">?(<var class="var">pattern-list</var>)</code></dt>
|
|
<dd><p>Matches zero or one occurrence of the given patterns.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">*(<var class="var">pattern-list</var>)</code></dt>
|
|
<dd><p>Matches zero or more occurrences of the given patterns.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">+(<var class="var">pattern-list</var>)</code></dt>
|
|
<dd><p>Matches one or more occurrences of the given patterns.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">@(<var class="var">pattern-list</var>)</code></dt>
|
|
<dd><p>Matches one of the given patterns.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!(<var class="var">pattern-list</var>)</code></dt>
|
|
<dd><p>Matches anything except one of the given patterns.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The <code class="code">extglob</code> option changes the behavior of the parser, since the
|
|
parentheses are normally treated as operators with syntactic meaning.
|
|
To ensure that extended matching patterns are parsed correctly, make sure
|
|
that <code class="code">extglob</code> is enabled before parsing constructs containing the
|
|
patterns, including shell functions and command substitutions.
|
|
</p>
|
|
<p>When matching filenames, the <code class="code">dotglob</code> shell option determines
|
|
the set of filenames that are tested:
|
|
when <code class="code">dotglob</code> is enabled, the set of filenames includes all files
|
|
beginning with ‘<samp class="samp">.</samp>’, but the filenames
|
|
<samp class="file">.</samp> and <samp class="file">..</samp> must be matched by a
|
|
pattern or sub-pattern that begins with a dot;
|
|
when it is disabled, the set does not
|
|
include any filenames beginning with ‘<samp class="samp">.</samp>’ unless the pattern
|
|
or sub-pattern begins with a ‘<samp class="samp">.</samp>’.
|
|
If the <code class="code">globskipdots</code>
|
|
shell option is enabled, the filenames
|
|
<samp class="file">.</samp> and <samp class="file">..</samp>
|
|
never appear in the set.
|
|
As above, ‘<samp class="samp">.</samp>’ only has a special meaning when matching filenames.
|
|
</p>
|
|
<p>Complicated extended pattern matching against long strings is slow,
|
|
especially when the patterns contain alternations and the strings
|
|
contain multiple matches.
|
|
Using separate matches against shorter strings, or using arrays of
|
|
strings instead of a single long string, may be faster.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Quote-Removal">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Filename-Expansion" accesskey="p" rel="prev">Filename Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Quote-Removal-1"><span>3.5.9 Quote Removal<a class="copiable-link" href="#Quote-Removal-1"> ¶</a></span></h4>
|
|
|
|
<p>After the preceding expansions, all unquoted occurrences of the
|
|
characters ‘<samp class="samp">\</samp>’, ‘<samp class="samp">'</samp>’, and ‘<samp class="samp">"</samp>’ that did not
|
|
result from one of the above expansions are removed.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Redirections">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Executing-Commands" accesskey="n" rel="next">Executing Commands</a>, Previous: <a href="#Shell-Expansions" accesskey="p" rel="prev">Shell Expansions</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Redirections-1"><span>3.6 Redirections<a class="copiable-link" href="#Redirections-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-redirection"></a>
|
|
|
|
<p>Before a command is executed, its input and output may be
|
|
<em class="dfn">redirected</em>
|
|
using a special notation interpreted by the shell.
|
|
<em class="dfn">Redirection</em> allows commands’ file handles to be
|
|
duplicated, opened, closed, made to refer to different files,
|
|
and can change the files the command reads from and writes to.
|
|
When used with the <code class="code">exec</code> builtin,
|
|
redirections modify file handles in the current shell execution environment.
|
|
The following redirection
|
|
operators may precede or appear anywhere within a
|
|
simple command or may follow a command.
|
|
Redirections are processed in the order they appear, from
|
|
left to right.
|
|
</p>
|
|
<p>Each redirection that may be preceded by a file descriptor number
|
|
may instead be preceded by a word of the form {<var class="var">varname</var>}.
|
|
In this case, for each redirection operator except
|
|
<code class="code">>&-</code>
|
|
and
|
|
<code class="code"><&-</code>,
|
|
the shell allocates a file descriptor greater
|
|
than or equal to 10 and assigns it to {<var class="var">varname</var>}.
|
|
If {<var class="var">varname</var>} precedes
|
|
<code class="code">>&-</code>
|
|
or
|
|
<code class="code"><&-</code>,
|
|
the value of <var class="var">varname</var> defines the file descriptor to close.
|
|
If {<var class="var">varname</var>} is supplied, the redirection persists beyond
|
|
the scope of the command, which allows the shell programmer to
|
|
manage the file descriptor’s lifetime manually without using
|
|
the <code class="code">exec</code> builtin.
|
|
The <code class="code">varredir_close</code> shell option manages this behavior
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
</p>
|
|
<p>In the following descriptions, if the file descriptor number is
|
|
omitted, and the first character of the redirection operator is
|
|
‘<samp class="samp"><</samp>’,
|
|
the redirection refers to the standard input (file descriptor 0).
|
|
If the first character of the redirection operator is
|
|
‘<samp class="samp">></samp>’,
|
|
the redirection refers to the standard output (file descriptor 1).
|
|
</p>
|
|
<p>The <var class="var">word</var> following the redirection operator in the following
|
|
descriptions, unless otherwise noted, is subjected to
|
|
brace expansion,
|
|
tilde expansion,
|
|
parameter and variable expansion,
|
|
command substitution,
|
|
arithmetic expansion,
|
|
quote removal,
|
|
filename expansion,
|
|
and word splitting.
|
|
If it expands to more than one word, Bash reports an error.
|
|
</p>
|
|
<p>The order of redirections is significant.
|
|
For example,
|
|
the command
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">ls > <var class="var">dirlist</var> 2>&1
|
|
</pre></div>
|
|
<p>directs both standard output (file descriptor 1) and standard error
|
|
(file descriptor 2) to the file <var class="var">dirlist</var>, while the command
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">ls 2>&1 > <var class="var">dirlist</var>
|
|
</pre></div>
|
|
<p>directs only the standard output to file <var class="var">dirlist</var>,
|
|
because the standard error was made a copy of the standard output
|
|
before the standard output was redirected to <var class="var">dirlist</var>.
|
|
</p>
|
|
<p>Bash handles several filenames specially when they are used in
|
|
redirections, as described in the following table.
|
|
If the operating system on which Bash is running provides these
|
|
special files, Bash uses them; otherwise it emulates them
|
|
internally with the behavior described below.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">/dev/fd/<var class="var">fd</var></code></dt>
|
|
<dd><p>If <var class="var">fd</var> is a valid integer, duplicate file descriptor <var class="var">fd</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">/dev/stdin</code></dt>
|
|
<dd><p>File descriptor 0 is duplicated.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">/dev/stdout</code></dt>
|
|
<dd><p>File descriptor 1 is duplicated.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">/dev/stderr</code></dt>
|
|
<dd><p>File descriptor 2 is duplicated.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">/dev/tcp/<var class="var">host</var>/<var class="var">port</var></code></dt>
|
|
<dd><p>If <var class="var">host</var> is a valid hostname or Internet address, and <var class="var">port</var>
|
|
is an integer port number or service name, Bash attempts to open
|
|
the corresponding TCP socket.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">/dev/udp/<var class="var">host</var>/<var class="var">port</var></code></dt>
|
|
<dd><p>If <var class="var">host</var> is a valid hostname or Internet address, and <var class="var">port</var>
|
|
is an integer port number or service name, Bash attempts to open
|
|
the corresponding UDP socket.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>A failure to open or create a file causes the redirection to fail.
|
|
</p>
|
|
<p>Redirections using file descriptors greater than 9 should be used with
|
|
care, as they may conflict with file descriptors the shell uses
|
|
internally.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Redirecting-Input" accesskey="1">Redirecting Input</a></li>
|
|
<li><a href="#Redirecting-Output" accesskey="2">Redirecting Output</a></li>
|
|
<li><a href="#Appending-Redirected-Output" accesskey="3">Appending Redirected Output</a></li>
|
|
<li><a href="#Redirecting-Standard-Output-and-Standard-Error" accesskey="4">Redirecting Standard Output and Standard Error</a></li>
|
|
<li><a href="#Appending-Standard-Output-and-Standard-Error" accesskey="5">Appending Standard Output and Standard Error</a></li>
|
|
<li><a href="#Here-Documents" accesskey="6">Here Documents</a></li>
|
|
<li><a href="#Here-Strings" accesskey="7">Here Strings</a></li>
|
|
<li><a href="#Duplicating-File-Descriptors" accesskey="8">Duplicating File Descriptors</a></li>
|
|
<li><a href="#Moving-File-Descriptors" accesskey="9">Moving File Descriptors</a></li>
|
|
<li><a href="#Opening-File-Descriptors-for-Reading-and-Writing">Opening File Descriptors for Reading and Writing</a></li>
|
|
</ul>
|
|
<div class="subsection-level-extent" id="Redirecting-Input">
|
|
<h4 class="subsection"><span>3.6.1 Redirecting Input<a class="copiable-link" href="#Redirecting-Input"> ¶</a></span></h4>
|
|
<p>Redirecting input opens the file whose name results from
|
|
the expansion of <var class="var">word</var> for reading on file descriptor <code class="code">n</code>,
|
|
or the standard input (file descriptor 0) if <code class="code">n</code>
|
|
is not specified.
|
|
</p>
|
|
<p>The general format for redirecting input is:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]<<var class="var">word</var>
|
|
</pre></div>
|
|
|
|
</div>
|
|
<div class="subsection-level-extent" id="Redirecting-Output">
|
|
<h4 class="subsection"><span>3.6.2 Redirecting Output<a class="copiable-link" href="#Redirecting-Output"> ¶</a></span></h4>
|
|
<p>Redirecting output opens the file whose name results from
|
|
the expansion of <var class="var">word</var>
|
|
for writing on file descriptor <var class="var">n</var>,
|
|
or the standard output (file descriptor 1) if <var class="var">n</var>
|
|
is not specified.
|
|
If the file does not exist it is created;
|
|
if it does exist it is truncated to zero size.
|
|
</p>
|
|
<p>The general format for redirecting output is:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]>[|]<var class="var">word</var>
|
|
</pre></div>
|
|
|
|
<p>If the redirection operator is
|
|
‘<samp class="samp">></samp>’,
|
|
and the
|
|
<code class="code">noclobber</code>
|
|
option to the
|
|
<code class="code">set</code>
|
|
builtin command has been enabled, the redirection fails if the file
|
|
whose name results from the expansion of <var class="var">word</var> exists and is
|
|
a regular file.
|
|
If the redirection operator is ‘<samp class="samp">>|</samp>’,
|
|
or the redirection operator is ‘<samp class="samp">></samp>’ and
|
|
the <code class="code">noclobber</code> option to the <code class="code">set</code>
|
|
builtin is not enabled,
|
|
Bash attempts the redirection
|
|
even if the file named by <var class="var">word</var> exists.
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Appending-Redirected-Output">
|
|
<h4 class="subsection"><span>3.6.3 Appending Redirected Output<a class="copiable-link" href="#Appending-Redirected-Output"> ¶</a></span></h4>
|
|
<p>Redirecting output in this fashion opens
|
|
the file whose name results from the expansion of
|
|
<var class="var">word</var>
|
|
for appending on file descriptor <var class="var">n</var>,
|
|
or the standard output (file descriptor 1) if <var class="var">n</var>
|
|
is not specified.
|
|
If the file does not exist it is created.
|
|
</p>
|
|
<p>The general format for appending output is:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]>><var class="var">word</var>
|
|
</pre></div>
|
|
|
|
</div>
|
|
<div class="subsection-level-extent" id="Redirecting-Standard-Output-and-Standard-Error">
|
|
<h4 class="subsection"><span>3.6.4 Redirecting Standard Output and Standard Error<a class="copiable-link" href="#Redirecting-Standard-Output-and-Standard-Error"> ¶</a></span></h4>
|
|
<p>This construct redirects both the
|
|
standard output (file descriptor 1) and
|
|
the standard error output (file descriptor 2)
|
|
to the file whose name is the expansion of <var class="var">word</var>.
|
|
</p>
|
|
<p>There are two formats for redirecting standard output and
|
|
standard error:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">&><var class="var">word</var>
|
|
</pre></div>
|
|
<p>and
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">>&<var class="var">word</var>
|
|
</pre></div>
|
|
<p>Of the two forms, the first is preferred.
|
|
This is semantically equivalent to
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">><var class="var">word</var> 2>&1
|
|
</pre></div>
|
|
<p>When using the second form, <var class="var">word</var> may not expand to a number or
|
|
‘<samp class="samp">-</samp>’.
|
|
If it does, other redirection operators apply
|
|
(see Duplicating File Descriptors below) for compatibility reasons.
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Appending-Standard-Output-and-Standard-Error">
|
|
<h4 class="subsection"><span>3.6.5 Appending Standard Output and Standard Error<a class="copiable-link" href="#Appending-Standard-Output-and-Standard-Error"> ¶</a></span></h4>
|
|
<p>This construct appends both the
|
|
standard output (file descriptor 1) and
|
|
the standard error output (file descriptor 2)
|
|
to the file whose name is the expansion of <var class="var">word</var>.
|
|
</p>
|
|
<p>The format for appending standard output and standard error is:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">&>><var class="var">word</var>
|
|
</pre></div>
|
|
<p>This is semantically equivalent to
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">>><var class="var">word</var> 2>&1
|
|
</pre></div>
|
|
<p>(see Duplicating File Descriptors below).
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Here-Documents">
|
|
<h4 class="subsection"><span>3.6.6 Here Documents<a class="copiable-link" href="#Here-Documents"> ¶</a></span></h4>
|
|
<p>This type of redirection instructs the shell to read input from the
|
|
current source until it reads a line containing only <var class="var">delimiter</var>
|
|
(with no trailing blanks).
|
|
All of the lines read up to that point then become the standard
|
|
input (or file descriptor <var class="var">n</var> if <var class="var">n</var> is specified) for a command.
|
|
</p>
|
|
<p>The format of here-documents is:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]<<[−]<var class="var">word</var>
|
|
<var class="var">here-document</var>
|
|
<var class="var">delimiter</var>
|
|
</pre></div>
|
|
|
|
<p>The shell does not perform
|
|
parameter and variable expansion, command substitution,
|
|
arithmetic expansion, or filename expansion on
|
|
<var class="var">word</var>.
|
|
</p>
|
|
<p>If any part of <var class="var">word</var> is quoted, the
|
|
<var class="var">delimiter</var> is the result of quote removal on <var class="var">word</var>,
|
|
and the lines in the here-document are not expanded.
|
|
If <var class="var">word</var> is unquoted,
|
|
<var class="var">delimiter</var> is <var class="var">word</var> itself,
|
|
and the here-document text is treated similarly to a double-quoted string:
|
|
all lines of the here-document are subjected to
|
|
parameter expansion, command substitution, and arithmetic expansion,
|
|
the character sequence <code class="code">\newline</code> is treated literally,
|
|
and ‘<samp class="samp">\</samp>’ must be used to quote the characters
|
|
‘<samp class="samp">\</samp>’, ‘<samp class="samp">$</samp>’, and ‘<samp class="samp">`</samp>’;
|
|
however, double quote characters have no special meaning.
|
|
</p>
|
|
<p>If the redirection operator is ‘<samp class="samp"><<-</samp>’,
|
|
the shell strips leading tab characters from input lines
|
|
and the line containing <var class="var">delimiter</var>.
|
|
This allows here-documents within shell scripts to be indented in a
|
|
natural fashion.
|
|
</p>
|
|
<p>If the delimiter is not quoted, the shell treats the
|
|
<code class="code">\<newline></code>
|
|
sequence as a line continuation: the two lines are joined
|
|
and the backslash-newline is removed.
|
|
This happens while reading the here-document, before the check for
|
|
the ending delimiter, so joined lines can form the end delimiter.
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Here-Strings">
|
|
<h4 class="subsection"><span>3.6.7 Here Strings<a class="copiable-link" href="#Here-Strings"> ¶</a></span></h4>
|
|
<p>A variant of here documents, the format is:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]<<< <var class="var">word</var>
|
|
</pre></div>
|
|
|
|
<p>The <var class="var">word</var> undergoes
|
|
tilde expansion, parameter and variable expansion,
|
|
command substitution, arithmetic expansion, and quote removal.
|
|
Filename expansion and word splitting are not performed.
|
|
The result is supplied as a single string, with a newline appended,
|
|
to the command on its
|
|
standard input (or file descriptor <var class="var">n</var> if <var class="var">n</var> is specified).
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Duplicating-File-Descriptors">
|
|
<h4 class="subsection"><span>3.6.8 Duplicating File Descriptors<a class="copiable-link" href="#Duplicating-File-Descriptors"> ¶</a></span></h4>
|
|
<p>The redirection operator
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]<&<var class="var">word</var>
|
|
</pre></div>
|
|
<p>is used to duplicate input file descriptors.
|
|
If <var class="var">word</var>
|
|
expands to one or more digits, file descriptor <var class="var">n</var>
|
|
is made to be a copy of that file descriptor.
|
|
It is a redirection error if the digits in
|
|
<var class="var">word</var> do not specify a file descriptor open for input.
|
|
If <var class="var">word</var>
|
|
evaluates to ‘<samp class="samp">-</samp>’, file descriptor <var class="var">n</var> is closed.
|
|
If <var class="var">n</var> is not specified, this uses the standard input (file descriptor 0).
|
|
</p>
|
|
<p>The operator
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]>&<var class="var">word</var>
|
|
</pre></div>
|
|
<p>is used similarly to duplicate output file descriptors.
|
|
If <var class="var">n</var> is not specified, this uses the standard output (file descriptor 1).
|
|
It is a redirection error if the digits in
|
|
<var class="var">word</var> do not specify a file descriptor open for output.
|
|
If <var class="var">word</var>
|
|
evaluates to ‘<samp class="samp">-</samp>’, file descriptor <var class="var">n</var> is closed.
|
|
As a special case, if <var class="var">n</var> is omitted, and
|
|
<var class="var">word</var> does not expand to one or more digits or ‘<samp class="samp">-</samp>’,
|
|
this redirects the standard output and standard error as described
|
|
previously.
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Moving-File-Descriptors">
|
|
<h4 class="subsection"><span>3.6.9 Moving File Descriptors<a class="copiable-link" href="#Moving-File-Descriptors"> ¶</a></span></h4>
|
|
<p>The redirection operator
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]<&<var class="var">digit</var>-
|
|
</pre></div>
|
|
<p>moves the file descriptor <var class="var">digit</var> to file descriptor <var class="var">n</var>,
|
|
or the standard input (file descriptor 0) if <var class="var">n</var> is not specified.
|
|
<var class="var">digit</var> is closed after being duplicated to <var class="var">n</var>.
|
|
</p>
|
|
<p>Similarly, the redirection operator
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]>&<var class="var">digit</var>-
|
|
</pre></div>
|
|
<p>moves the file descriptor <var class="var">digit</var> to file descriptor <var class="var">n</var>,
|
|
or the standard output (file descriptor 1) if <var class="var">n</var> is not specified.
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Opening-File-Descriptors-for-Reading-and-Writing">
|
|
<h4 class="subsection"><span>3.6.10 Opening File Descriptors for Reading and Writing<a class="copiable-link" href="#Opening-File-Descriptors-for-Reading-and-Writing"> ¶</a></span></h4>
|
|
<p>The redirection operator
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[<var class="var">n</var>]<><var class="var">word</var>
|
|
</pre></div>
|
|
<p>opens the file whose name is the expansion of <var class="var">word</var>
|
|
for both reading and writing on file descriptor
|
|
<var class="var">n</var>, or on file descriptor 0 if <var class="var">n</var>
|
|
is not specified.
|
|
If the file does not exist, it is created.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Executing-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Scripts" accesskey="n" rel="next">Shell Scripts</a>, Previous: <a href="#Redirections" accesskey="p" rel="prev">Redirections</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Executing-Commands-1"><span>3.7 Executing Commands<a class="copiable-link" href="#Executing-Commands-1"> ¶</a></span></h3>
|
|
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Simple-Command-Expansion" accesskey="1">Simple Command Expansion</a></li>
|
|
<li><a href="#Command-Search-and-Execution" accesskey="2">Command Search and Execution</a></li>
|
|
<li><a href="#Command-Execution-Environment" accesskey="3">Command Execution Environment</a></li>
|
|
<li><a href="#Environment" accesskey="4">Environment</a></li>
|
|
<li><a href="#Exit-Status" accesskey="5">Exit Status</a></li>
|
|
<li><a href="#Signals" accesskey="6">Signals</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Simple-Command-Expansion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Command-Search-and-Execution" accesskey="n" rel="next">Command Search and Execution</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Simple-Command-Expansion-1"><span>3.7.1 Simple Command Expansion<a class="copiable-link" href="#Simple-Command-Expansion-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-command-expansion"></a>
|
|
|
|
<p>When the shell executes a simple command, it performs the following
|
|
expansions, assignments, and redirections, from left to right, in
|
|
the following order.
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> The words that the parser has marked as variable assignments (those
|
|
preceding the command name) and redirections are saved for later
|
|
processing.
|
|
|
|
</li><li> The words that are not variable assignments or redirections are
|
|
expanded (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>).
|
|
If any words remain after expansion, the first word
|
|
is taken to be the name of the command and the remaining words are
|
|
the arguments.
|
|
|
|
</li><li> Redirections are performed as described above (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
|
|
</li><li> The text after the ‘<samp class="samp">=</samp>’ in each variable assignment undergoes tilde
|
|
expansion, parameter expansion, command substitution, arithmetic expansion,
|
|
and quote removal before being assigned to the variable.
|
|
</li></ol>
|
|
|
|
<p>If no command name results, the variable assignments affect the current
|
|
shell environment.
|
|
In the case of such a command (one that consists only of assignment
|
|
statements and redirections), assignment statements are performed before
|
|
redirections.
|
|
Otherwise, the variables are added to the environment
|
|
of the executed command and do not affect the current shell environment.
|
|
If any of the assignments attempts to assign a value to a readonly variable,
|
|
an error occurs, and the command exits with a non-zero status.
|
|
</p>
|
|
<p>If no command name results, redirections are performed, but do not
|
|
affect the current shell environment.
|
|
A redirection error causes the command to exit with a non-zero status.
|
|
</p>
|
|
<p>If there is a command name left after expansion, execution proceeds as
|
|
described below.
|
|
Otherwise, the command exits.
|
|
If one of the expansions contained a command substitution,
|
|
the exit status of the command is the exit status of
|
|
the last command substitution performed.
|
|
If there were no command substitutions,
|
|
the command exits with a zero status.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Command-Search-and-Execution">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Command-Execution-Environment" accesskey="n" rel="next">Command Execution Environment</a>, Previous: <a href="#Simple-Command-Expansion" accesskey="p" rel="prev">Simple Command Expansion</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Command-Search-and-Execution-1"><span>3.7.2 Command Search and Execution<a class="copiable-link" href="#Command-Search-and-Execution-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-command-execution"></a>
|
|
<a class="index-entry-id" id="index-command-search"></a>
|
|
|
|
<p>After a command has been split into words, if it results in a
|
|
simple command and an optional list of arguments, the shell performs
|
|
the following actions.
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> If the command name contains no slashes, the shell attempts to
|
|
locate it.
|
|
If there exists a shell function by that name, that
|
|
function is invoked as described in <a class="ref" href="#Shell-Functions">Shell Functions</a>.
|
|
|
|
</li><li> If the name does not match a function, the shell searches for
|
|
it in the list of shell builtins.
|
|
If a match is found, that builtin is invoked.
|
|
|
|
</li><li> If the name is neither a shell function nor a builtin,
|
|
and contains no slashes, Bash searches each element of
|
|
<code class="env">$PATH</code> for a directory containing an executable file
|
|
by that name.
|
|
Bash uses a hash table to remember the full
|
|
pathnames of executable files to avoid multiple <code class="env">PATH</code> searches
|
|
(see the description of <code class="code">hash</code> in <a class="ref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
Bash performs a full search of the directories in <code class="env">$PATH</code>
|
|
only if the command is not found in the hash table.
|
|
If the search is unsuccessful, the shell searches for a defined shell
|
|
function named <code class="code">command_not_found_handle</code>.
|
|
If that function exists, it is invoked in a separate execution environment
|
|
with the original command and
|
|
the original command’s arguments as its arguments, and the function’s
|
|
exit status becomes the exit status of that subshell.
|
|
If that function is not defined, the shell prints an error
|
|
message and returns an exit status of 127.
|
|
|
|
</li><li> If the search is successful, or if the command name contains
|
|
one or more slashes, the shell executes the named program in
|
|
a separate execution environment.
|
|
Argument 0 is set to the name given, and the remaining arguments
|
|
to the command are set to the arguments supplied, if any.
|
|
|
|
</li><li> If this execution fails because the file is not in executable
|
|
format, and the file is not a directory, it is assumed to be a
|
|
<em class="dfn">shell script</em>,
|
|
a file containing shell commands,
|
|
and the shell executes it as described in <a class="ref" href="#Shell-Scripts">Shell Scripts</a>.
|
|
|
|
</li><li> If the command was not begun asynchronously, the shell waits for
|
|
the command to complete and collects its exit status.
|
|
|
|
</li></ol>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Command-Execution-Environment">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Environment" accesskey="n" rel="next">Environment</a>, Previous: <a href="#Command-Search-and-Execution" accesskey="p" rel="prev">Command Search and Execution</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Command-Execution-Environment-1"><span>3.7.3 Command Execution Environment<a class="copiable-link" href="#Command-Execution-Environment-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-execution-environment"></a>
|
|
|
|
<p>The shell has an <em class="dfn">execution environment</em>, which consists of the
|
|
following:
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>Open files inherited by the shell at invocation, as modified by
|
|
redirections supplied to the <code class="code">exec</code> builtin.
|
|
|
|
</li><li>The current working directory as set by <code class="code">cd</code>, <code class="code">pushd</code>, or
|
|
<code class="code">popd</code>, or inherited by the shell at invocation.
|
|
|
|
</li><li>The file creation mode mask as set by <code class="code">umask</code> or inherited from
|
|
the shell’s parent.
|
|
|
|
</li><li>Current traps set by <code class="code">trap</code>.
|
|
|
|
</li><li>Shell parameters that are set by variable assignment or with <code class="code">set</code>
|
|
or inherited from the shell’s parent in the environment.
|
|
|
|
</li><li>Shell functions defined during execution or inherited from the shell’s
|
|
parent in the environment.
|
|
|
|
</li><li>Options enabled at invocation (either by default or with command-line
|
|
arguments) or by <code class="code">set</code>.
|
|
|
|
</li><li>Options enabled by <code class="code">shopt</code> (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
|
|
</li><li>Shell aliases defined with <code class="code">alias</code> (see <a class="pxref" href="#Aliases">Aliases</a>).
|
|
|
|
</li><li>Various process <small class="sc">ID</small>s, including those of background jobs
|
|
(see <a class="pxref" href="#Lists">Lists of Commands</a>), the value of <code class="code">$$</code>, and the value of <code class="env">$PPID</code>.
|
|
|
|
</li></ul>
|
|
|
|
<p>When a simple command other than a builtin or shell function
|
|
is to be executed, it
|
|
is invoked in a separate execution environment that consists of
|
|
the following.
|
|
Unless otherwise noted, the values are inherited from the shell.
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>The shell’s open files, plus any modifications and additions specified
|
|
by redirections to the command.
|
|
|
|
</li><li>The current working directory.
|
|
|
|
</li><li>The file creation mode mask.
|
|
|
|
</li><li>Shell variables and functions marked for export, along with variables
|
|
exported for the command, passed in the environment (see <a class="pxref" href="#Environment">Environment</a>).
|
|
|
|
</li><li>Traps caught by the shell are reset to the values inherited from the
|
|
shell’s parent, and traps ignored by the shell are ignored.
|
|
|
|
</li></ul>
|
|
|
|
<p>A command invoked in this separate environment cannot affect the
|
|
shell’s execution environment.
|
|
</p>
|
|
<p>A <em class="dfn">subshell</em> is a copy of the shell process.
|
|
</p>
|
|
<p>Command substitution, commands grouped with parentheses,
|
|
and asynchronous commands are invoked in a
|
|
subshell environment that is a duplicate of the shell environment,
|
|
except that traps caught by the shell are reset to the values
|
|
that the shell inherited from its parent at invocation.
|
|
Builtin commands that are invoked as part of a pipeline,
|
|
except possibly in the last element depending on the value of the
|
|
<code class="code">lastpipe</code> shell option (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>),
|
|
are also executed in a subshell environment.
|
|
Changes made to the subshell environment
|
|
cannot affect the shell’s execution environment.
|
|
</p>
|
|
<p>When the shell is in <small class="sc">POSIX</small> mode,
|
|
subshells spawned to execute command substitutions inherit the value of
|
|
the <samp class="option">-e</samp> option from the parent shell.
|
|
When not in <small class="sc">POSIX</small> mode,
|
|
Bash clears the <samp class="option">-e</samp> option in such subshells
|
|
See the description of the <code class="code">inherit_errexit</code> shell option
|
|
(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>) for how to control this behavior when not
|
|
in <small class="sc">POSIX</small> mode.
|
|
</p>
|
|
<p>If a command is followed by a ‘<samp class="samp">&</samp>’ and job control is not active, the
|
|
default standard input for the command is the empty file <samp class="file">/dev/null</samp>.
|
|
Otherwise, the invoked command inherits the file descriptors of the calling
|
|
shell as modified by redirections.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Environment">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Exit-Status" accesskey="n" rel="next">Exit Status</a>, Previous: <a href="#Command-Execution-Environment" accesskey="p" rel="prev">Command Execution Environment</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Environment-1"><span>3.7.4 Environment<a class="copiable-link" href="#Environment-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-environment"></a>
|
|
|
|
<p>When a program is invoked it is given an array of strings
|
|
called the <em class="dfn">environment</em>.
|
|
This is a list of name-value pairs, of the form <code class="code">name=value</code>.
|
|
</p>
|
|
<p>Bash provides several ways to manipulate the environment.
|
|
On invocation, the shell scans its own environment and
|
|
creates a parameter for each name found, automatically marking
|
|
it for <code class="code">export</code> to child processes.
|
|
Executed commands inherit the environment.
|
|
The <code class="code">export</code>, ‘<samp class="samp">declare -x</samp>’, and <code class="code">unset</code>
|
|
commands modify the environment by
|
|
adding and deleting parameters and functions.
|
|
If the value of a parameter in the environment is modified,
|
|
the new value automatically becomes part
|
|
of the environment, replacing the old.
|
|
The environment
|
|
inherited by any executed command consists of the shell’s
|
|
initial environment, whose values may be modified in the shell,
|
|
less any pairs removed by the <code class="code">unset</code> and ‘<samp class="samp">export -n</samp>’
|
|
commands, plus any additions via the <code class="code">export</code> and
|
|
‘<samp class="samp">declare -x</samp>’ commands.
|
|
</p>
|
|
<p>If any parameter assignment statements,
|
|
as described in <a class="ref" href="#Shell-Parameters">Shell Parameters</a>,
|
|
appear before a simple command,
|
|
the variable assignments are part of that command’s environment
|
|
for as long as it executes.
|
|
These assignment statements affect only the environment seen
|
|
by that command.
|
|
If these assignments precede a call to a shell function, the variables
|
|
are local to the function and exported to that function’s children.
|
|
</p>
|
|
<p>If the <samp class="option">-k</samp> option is set (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>), then all
|
|
parameter assignments are placed in the environment for a command,
|
|
not just those that precede the command name.
|
|
</p>
|
|
<p>When Bash invokes an external command, the variable ‘<samp class="samp">$_</samp>’
|
|
is set to the full pathname of the command and passed to that
|
|
command in its environment.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Exit-Status">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Signals" accesskey="n" rel="next">Signals</a>, Previous: <a href="#Environment" accesskey="p" rel="prev">Environment</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Exit-Status-1"><span>3.7.5 Exit Status<a class="copiable-link" href="#Exit-Status-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-exit-status-1"></a>
|
|
|
|
<p>The exit status of an executed command is the value returned by the
|
|
<code class="code">waitpid</code> system call or equivalent function.
|
|
Exit statuses fall between 0 and 255, though, as explained below,
|
|
the shell may use values above 125 specially.
|
|
Exit statuses from shell builtins and compound commands are also limited
|
|
to this range.
|
|
Under certain circumstances, the shell will use special values to
|
|
indicate specific failure modes.
|
|
</p>
|
|
<p>For the shell’s purposes, a command which exits with a
|
|
zero exit status has succeeded.
|
|
So while an exit status of zero indicates success, a non-zero
|
|
exit status indicates failure.
|
|
This seemingly counter-intuitive scheme is used so there
|
|
is one well-defined way to indicate success and a variety of
|
|
ways to indicate various failure modes.
|
|
</p>
|
|
<p>When a command terminates on a fatal signal whose number is <var class="var">N</var>,
|
|
Bash uses the value 128+<var class="var">N</var> as the exit status.
|
|
</p>
|
|
<p>If a command is not found, the child process created to
|
|
execute it returns a status of 127.
|
|
If a command is found but is not executable, the return status is 126.
|
|
</p>
|
|
<p>If a command fails because of an error during expansion or redirection,
|
|
the exit status is greater than zero.
|
|
</p>
|
|
<p>The exit status is used by the Bash conditional commands
|
|
(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>) and some of the list
|
|
constructs (see <a class="pxref" href="#Lists">Lists of Commands</a>).
|
|
</p>
|
|
<p>All of the Bash builtins return an exit status of zero if they succeed
|
|
and a non-zero status on failure, so they may be used by the
|
|
conditional and list constructs.
|
|
All builtins return an exit status of 2 to indicate incorrect usage,
|
|
generally invalid options or missing arguments.
|
|
</p>
|
|
<p>The exit status of the last command is available in the special
|
|
parameter $? (see <a class="pxref" href="#Special-Parameters">Special Parameters</a>).
|
|
</p>
|
|
<p>Bash itself returns the exit status of the last command
|
|
executed, unless a syntax error occurs, in which case it exits
|
|
with a non-zero value.
|
|
See also the <code class="code">exit</code> builtin command (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Signals">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Exit-Status" accesskey="p" rel="prev">Exit Status</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Signals-1"><span>3.7.6 Signals<a class="copiable-link" href="#Signals-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-signal-handling"></a>
|
|
|
|
<p>When Bash is interactive, in the absence of any traps,
|
|
it ignores <code class="code">SIGTERM</code>
|
|
(so that ‘<samp class="samp">kill 0</samp>’ does not kill an interactive shell),
|
|
and catches and handles <code class="code">SIGINT</code>
|
|
(so that the <code class="code">wait</code> builtin is interruptible).
|
|
When Bash receives a <code class="code">SIGINT</code>, it breaks out of any executing loops.
|
|
In all cases, Bash ignores <code class="code">SIGQUIT</code>.
|
|
If job control is in effect (see <a class="pxref" href="#Job-Control">Job Control</a>), Bash
|
|
ignores <code class="code">SIGTTIN</code>, <code class="code">SIGTTOU</code>, and <code class="code">SIGTSTP</code>.
|
|
</p>
|
|
<p>The <code class="code">trap</code> builtin modifies the shell’s signal handling, as
|
|
described below (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
</p>
|
|
<p>Non-builtin commands Bash executes have signal handlers set to the
|
|
values inherited by the shell from its parent,
|
|
unless <code class="code">trap</code> sets them to be ignored, in which case the child
|
|
process will ignore them as well.
|
|
When job control is not in effect, asynchronous commands
|
|
ignore <code class="code">SIGINT</code> and <code class="code">SIGQUIT</code> in addition to these inherited
|
|
handlers.
|
|
Commands run as a result of
|
|
command substitution ignore the keyboard-generated job control signals
|
|
<code class="code">SIGTTIN</code>, <code class="code">SIGTTOU</code>, and <code class="code">SIGTSTP</code>.
|
|
</p>
|
|
<p>The shell exits by default upon receipt of a <code class="code">SIGHUP</code>.
|
|
Before exiting, an interactive shell resends the <code class="code">SIGHUP</code> to
|
|
all jobs, running or stopped.
|
|
The shell sends <code class="code">SIGCONT</code> to stopped jobs to ensure that they
|
|
receive the <code class="code">SIGHUP</code>
|
|
(See <a class="xref" href="#Job-Control">Job Control</a>, for more information about running and stopped jobs).
|
|
To prevent the shell from sending the <code class="code">SIGHUP</code> signal to a
|
|
particular job, remove it from the jobs table with the <code class="code">disown</code>
|
|
builtin (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>) or mark it
|
|
not to receive <code class="code">SIGHUP</code> using <code class="code">disown -h</code>.
|
|
</p>
|
|
<p>If the <code class="code">huponexit</code> shell option has been set using <code class="code">shopt</code>
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), Bash sends a <code class="code">SIGHUP</code> to all jobs when
|
|
an interactive login shell exits.
|
|
</p>
|
|
<p>If Bash is waiting for a command to complete and receives a signal
|
|
for which a trap has been set,
|
|
it will not execute the trap until the command completes.
|
|
If Bash is waiting for an asynchronous command via the <code class="code">wait</code> builtin,
|
|
and it receives a signal for which a trap has been set,
|
|
the <code class="code">wait</code> builtin will return immediately with an exit status
|
|
greater than 128, immediately after which the shell executes the trap.
|
|
</p>
|
|
<p>When job control is not enabled, and Bash is waiting for a foreground
|
|
command to complete, the shell receives keyboard-generated signals
|
|
such as <code class="code">SIGINT</code> (usually generated by ‘<samp class="samp">^C</samp>’) that users
|
|
commonly intend to send to that command.
|
|
This happens because the shell and the command are in the same process
|
|
group as the terminal, and ‘<samp class="samp">^C</samp>’ sends <code class="code">SIGINT</code> to all processes
|
|
in that process group.
|
|
Since Bash does not enable job control by default when the
|
|
shell is not interactive,
|
|
this scenario is most common in non-interactive shells.
|
|
</p>
|
|
<p>When job control is enabled, and Bash is waiting for a foreground
|
|
command to complete, the shell does not receive keyboard-generated
|
|
signals, because it is not in the same process group as the terminal.
|
|
This scenario is most common in interactive shells, where Bash
|
|
attempts to enable job control by default.
|
|
See <a class="ref" href="#Job-Control">Job Control</a>, for a more in-depth discussion of process groups.
|
|
</p>
|
|
<p>When job control is not enabled, and Bash receives <code class="code">SIGINT</code>
|
|
while waiting for a foreground command, it waits until that foreground
|
|
command terminates and then decides what to do about the <code class="code">SIGINT</code>:
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> If the command terminates due to the <code class="code">SIGINT</code>, Bash concludes
|
|
that the user meant to send the <code class="code">SIGINT</code> to the shell as well,
|
|
and acts on the
|
|
<code class="code">SIGINT</code>
|
|
(e.g., by running a <code class="code">SIGINT</code> trap,
|
|
exiting a non-interactive shell,
|
|
or returning to the top level to read a new command).
|
|
|
|
</li><li> If the command does not terminate due to <code class="code">SIGINT</code>, the program
|
|
handled the <code class="code">SIGINT</code> itself and did not treat it as a fatal signal.
|
|
In that case, Bash does not treat <code class="code">SIGINT</code> as a fatal signal,
|
|
either, instead assuming that the <code class="code">SIGINT</code> was used as part of the
|
|
program’s normal operation (e.g., <code class="command">emacs</code> uses it to abort editing
|
|
commands) or deliberately discarded.
|
|
However, Bash will run any
|
|
trap set on <code class="code">SIGINT</code>, as it does with any other trapped signal it
|
|
receives while it is waiting for the foreground command to
|
|
complete, for compatibility.
|
|
</li></ol>
|
|
|
|
<p>When job control is enabled, Bash does not receive keyboard-generated
|
|
signals such as <code class="code">SIGINT</code>
|
|
while it is waiting for a foreground command.
|
|
An interactive shell does not pay attention to the <code class="code">SIGINT</code>,
|
|
even if the foreground command terminates as a result, other than noting
|
|
its exit status.
|
|
If the shell is not interactive, and
|
|
the foreground command terminates due to the <code class="code">SIGINT</code>,
|
|
Bash pretends it received the <code class="code">SIGINT</code>
|
|
itself (scenario 1 above), for compatibility.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Shell-Scripts">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Executing-Commands" accesskey="p" rel="prev">Executing Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Scripts-1"><span>3.8 Shell Scripts<a class="copiable-link" href="#Shell-Scripts-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-shell-script"></a>
|
|
|
|
<p>A shell script is a text file containing shell commands.
|
|
When such a file is used as the first non-option argument when
|
|
invoking Bash, and neither the <samp class="option">-c</samp> nor <samp class="option">-s</samp> option
|
|
is supplied (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>),
|
|
Bash reads and executes commands from the file, then exits.
|
|
This mode of operation creates a non-interactive shell.
|
|
If the filename does not contain any slashes, the shell first searches
|
|
for the file in the current directory, and looks in the directories in
|
|
<code class="env">$PATH</code> if not found there.
|
|
</p>
|
|
<p>Bash tries to determine whether the file is a text file or a binary,
|
|
and will not execute files it determines to be binaries.
|
|
</p>
|
|
<p>When Bash runs
|
|
a shell script, it sets the special parameter <code class="code">0</code> to the name
|
|
of the file, rather than the name of the shell, and the positional
|
|
parameters are set to the remaining arguments, if any are given.
|
|
If no additional arguments are supplied, the positional parameters
|
|
are unset.
|
|
</p>
|
|
<p>A shell script may be made executable by using the <code class="code">chmod</code> command
|
|
to turn on the execute bit.
|
|
When Bash finds such a file while searching the <code class="env">$PATH</code> for a command,
|
|
it creates a new instance of itself to execute it.
|
|
In other words, executing
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">filename <var class="var">arguments</var>
|
|
</pre></div>
|
|
<p>is equivalent to executing
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">bash filename <var class="var">arguments</var>
|
|
</pre></div>
|
|
|
|
<p>if <code class="code">filename</code> is an executable shell script.
|
|
This subshell reinitializes itself, so that the effect is as if a
|
|
new shell had been invoked to interpret the script, with the
|
|
exception that the locations of commands remembered by the parent
|
|
(see the description of <code class="code">hash</code> in <a class="ref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
are retained by the child.
|
|
</p>
|
|
<p>The <small class="sc">GNU</small> operating system,
|
|
and most versions of Unix,
|
|
make this a part of the operating system’s command execution mechanism.
|
|
If the first line of a script begins with
|
|
the two characters ‘<samp class="samp">#!</samp>’, the remainder of the line specifies
|
|
an interpreter for the program and, depending on the operating system, one
|
|
or more optional arguments for that interpreter.
|
|
Thus, you can specify Bash, <code class="code">awk</code>, Perl, or some other
|
|
interpreter and write the rest of the script file in that language.
|
|
</p>
|
|
<p>The arguments to the interpreter
|
|
consist of one or more optional arguments following the interpreter
|
|
name on the first line of the script file, followed by the name of
|
|
the script file, followed by the rest of the arguments supplied to the
|
|
script.
|
|
The details of how the interpreter line is split into an interpreter name
|
|
and a set of arguments vary across systems.
|
|
Bash will perform this action on operating systems that do not handle it
|
|
themselves.
|
|
Note that some older versions of Unix limit the interpreter
|
|
name and a single argument to a maximum of 32 characters, so it’s not
|
|
portable to assume that using more than one argument will work.
|
|
</p>
|
|
<p>Bash scripts often begin with <code class="code">#! /bin/bash</code> (assuming that
|
|
Bash has been installed in <samp class="file">/bin</samp>), since this ensures that
|
|
Bash will be used to interpret the script, even if it is executed
|
|
under another shell.
|
|
It’s a common idiom to use <code class="code">env</code> to find
|
|
<code class="code">bash</code> even if it’s been installed in another directory:
|
|
<code class="code">#!/usr/bin/env bash</code> will find the first occurrence of <code class="code">bash</code>
|
|
in <code class="env">$PATH</code>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Shell-Builtin-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Variables" accesskey="n" rel="next">Shell Variables</a>, Previous: <a href="#Basic-Shell-Features" accesskey="p" rel="prev">Basic Shell Features</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Shell-Builtin-Commands-1"><span>4 Shell Builtin Commands<a class="copiable-link" href="#Shell-Builtin-Commands-1"> ¶</a></span></h2>
|
|
|
|
|
|
<p>Builtin commands are contained within the shell itself.
|
|
When the name of a builtin command is used as the first word of
|
|
a simple command (see <a class="pxref" href="#Simple-Commands">Simple Commands</a>), the shell executes
|
|
the command directly, without invoking another program.
|
|
Builtin commands are necessary to implement functionality impossible
|
|
or inconvenient to obtain with separate utilities.
|
|
</p>
|
|
<p>This section briefly describes the builtins which Bash inherits from
|
|
the Bourne Shell, as well as the builtin commands which are unique
|
|
to or have been extended in Bash.
|
|
</p>
|
|
<p>Several builtin commands are described in other chapters: builtin
|
|
commands which provide the Bash interface to the job control
|
|
facilities (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>), the directory stack
|
|
(see <a class="pxref" href="#Directory-Stack-Builtins">Directory Stack Builtins</a>), the command history
|
|
(see <a class="pxref" href="#Bash-History-Builtins">Bash History Builtins</a>), and the programmable completion
|
|
facilities (see <a class="pxref" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>).
|
|
</p>
|
|
<p>Many of the builtins have been extended by <small class="sc">POSIX</small> or Bash.
|
|
</p>
|
|
<p>Unless otherwise noted, each builtin command documented as accepting
|
|
options preceded by ‘<samp class="samp">-</samp>’ accepts ‘<samp class="samp">--</samp>’
|
|
to signify the end of the options.
|
|
The <code class="code">:</code>, <code class="code">true</code>, <code class="code">false</code>, and <code class="code">test</code>/<code class="code">[</code>
|
|
builtins do not accept options and do not treat ‘<samp class="samp">--</samp>’ specially.
|
|
The <code class="code">exit</code>, <code class="code">logout</code>, <code class="code">return</code>,
|
|
<code class="code">break</code>, <code class="code">continue</code>, <code class="code">let</code>,
|
|
and <code class="code">shift</code> builtins accept and process arguments beginning
|
|
with ‘<samp class="samp">-</samp>’ without requiring ‘<samp class="samp">--</samp>’.
|
|
Other builtins that accept arguments but are not specified as accepting
|
|
options interpret arguments beginning with ‘<samp class="samp">-</samp>’ as invalid options and
|
|
require ‘<samp class="samp">--</samp>’ to prevent this interpretation.
|
|
</p>
|
|
<p>All builtins except
|
|
<code class="code">:</code>, <code class="code">true</code>, <code class="code">false</code>, <code class="code">echo</code>, and <code class="code">test</code>/<code class="code">[</code>
|
|
accept ‘<samp class="samp">--help</samp>’ as a special option.
|
|
If ‘<samp class="samp">--help</samp>’ is supplied, these builtins output
|
|
a help message and exit with a status of 0.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Bourne-Shell-Builtins" accesskey="1">Bourne Shell Builtins</a></li>
|
|
<li><a href="#Bash-Builtins" accesskey="2">Bash Builtin Commands</a></li>
|
|
<li><a href="#Modifying-Shell-Behavior" accesskey="3">Modifying Shell Behavior</a></li>
|
|
<li><a href="#Special-Builtins" accesskey="4">Special Builtins</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Bourne-Shell-Builtins">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bash-Builtins" accesskey="n" rel="next">Bash Builtin Commands</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bourne-Shell-Builtins-1"><span>4.1 Bourne Shell Builtins<a class="copiable-link" href="#Bourne-Shell-Builtins-1"> ¶</a></span></h3>
|
|
|
|
<p>The following shell builtin commands are inherited from the Bourne Shell.
|
|
These commands are implemented as specified by the <small class="sc">POSIX</small> standard.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a id="index-_003a"></a><span><code class="code">: <span class="r">(a colon)</span></code><a class="copiable-link" href="#index-_003a"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">: [<var class="var">arguments</var>]
|
|
</pre></div>
|
|
|
|
<p>Do nothing beyond expanding <var class="var">arguments</var> and performing redirections.
|
|
The return status is zero.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-_002e"></a><span><code class="code">. <span class="r">(a period)</span></code><a class="copiable-link" href="#index-_002e"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">. [-p <var class="var">path</var>] <var class="var">filename</var> [<var class="var">arguments</var>]
|
|
</pre></div>
|
|
|
|
<p>The <code class="code">.</code> command reads and execute commands from the <var class="var">filename</var>
|
|
argument in the current shell context.
|
|
</p>
|
|
<p>If <var class="var">filename</var> does not contain a slash, <code class="code">.</code> searches for it.
|
|
If <samp class="option">-p</samp> is supplied, <code class="code">.</code> treats <var class="var">path</var>
|
|
as a colon-separated list of directories in which to find <var class="var">filename</var>;
|
|
otherwise, <code class="code">.</code> uses the directories in <code class="env">PATH</code> to find <var class="var">filename</var>.
|
|
<var class="var">filename</var> does not need to be executable.
|
|
When Bash is not in <small class="sc">POSIX</small> mode, it searches the current directory
|
|
if <var class="var">filename</var> is not found in <code class="env">$PATH</code>,
|
|
but does not search the current directory if <samp class="option">-p</samp> is supplied.
|
|
If the <code class="code">sourcepath</code> option (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) is turned off,
|
|
<code class="code">.</code> does not search <code class="env">PATH</code>.
|
|
</p>
|
|
<p>If any <var class="var">arguments</var> are supplied, they become the positional
|
|
parameters when <var class="var">filename</var> is executed.
|
|
Otherwise the positional parameters are unchanged.
|
|
</p>
|
|
<p>If the <samp class="option">-T</samp> option is enabled, <code class="code">.</code> inherits any trap on
|
|
<code class="code">DEBUG</code>; if it is not, any <code class="code">DEBUG</code> trap string is saved and
|
|
restored around the call to <code class="code">.</code>, and <code class="code">.</code> unsets the
|
|
<code class="code">DEBUG</code> trap while it executes.
|
|
If <samp class="option">-T</samp> is not set, and the sourced file changes
|
|
the <code class="code">DEBUG</code> trap, the new value persists after <code class="code">.</code> completes.
|
|
The return status is the exit status of the last command executed
|
|
from <var class="var">filename</var>, or
|
|
zero if no commands are executed.
|
|
If <var class="var">filename</var> is not found, or cannot be read,
|
|
the return status is non-zero.
|
|
This builtin is equivalent to <code class="code">source</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-break"></a><span><code class="code">break</code><a class="copiable-link" href="#index-break"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">break [<var class="var">n</var>]
|
|
</pre></div>
|
|
|
|
<p>Exit from a <code class="code">for</code>, <code class="code">while</code>, <code class="code">until</code>, or <code class="code">select</code> loop.
|
|
If <var class="var">n</var> is supplied, <code class="code">break</code> exits the <var class="var">n</var>th enclosing loop.
|
|
<var class="var">n</var> must be greater than or equal to 1.
|
|
The return status is zero unless <var class="var">n</var> is not greater than or equal to 1.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-cd"></a><span><code class="code">cd</code><a class="copiable-link" href="#index-cd"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">cd [-L] [-@] [<var class="var">directory</var>]
|
|
cd -P [-e] [-@] [<var class="var">directory</var>]
|
|
</pre></div>
|
|
|
|
<p>Change the current working directory to <var class="var">directory</var>.
|
|
If <var class="var">directory</var> is not supplied, the value of the <code class="env">HOME</code>
|
|
shell variable is used as <var class="var">directory</var>.
|
|
If <var class="var">directory</var> is the empty string, <code class="code">cd</code> treats it as an error.
|
|
If the shell variable
|
|
<code class="env">CDPATH</code> exists,
|
|
and <var class="var">directory</var> does not begin with a slash,
|
|
<code class="code">cd</code> uses it as a search path:
|
|
<code class="code">cd</code> searches each directory name in <code class="env">CDPATH</code> for
|
|
<var class="var">directory</var>, with alternative directory names in <code class="env">CDPATH</code>
|
|
separated by a colon (‘<samp class="samp">:</samp>’).
|
|
A null directory name in <code class="env">CDPATH</code> means the same thing as the
|
|
current directory.
|
|
</p>
|
|
<p>The <samp class="option">-P</samp> option means not to follow symbolic links: symbolic links
|
|
are resolved while <code class="code">cd</code> is traversing <var class="var">directory</var> and before
|
|
processing an instance of <samp class="file">..</samp> in <var class="var">directory</var>.
|
|
</p>
|
|
<p>By default, or when the <samp class="option">-L</samp> option is supplied, symbolic links
|
|
in <var class="var">directory</var> are resolved after <code class="code">cd</code> processes an instance
|
|
of <samp class="file">..</samp> in <var class="var">directory</var>.
|
|
</p>
|
|
<p>If <samp class="file">..</samp> appears in <var class="var">directory</var>, <code class="code">cd</code> processes it by removing the
|
|
immediately preceding pathname component, back to a slash or the beginning
|
|
of <var class="var">directory</var>,
|
|
and verifying that the portion of <var class="var">directory</var>
|
|
it has processed to
|
|
that point is still a valid directory name after removing the pathname
|
|
component.
|
|
If it is not a valid directory name, <code class="code">cd</code> returns a non-zero status.
|
|
</p>
|
|
<p>If the <samp class="option">-e</samp> option is supplied with <samp class="option">-P</samp>
|
|
and <code class="code">cd</code> cannot successfully determine the current working directory
|
|
after a successful directory change, it returns a non-zero status.
|
|
</p>
|
|
<p>On systems that support it, the <samp class="option">-@</samp> option presents the extended
|
|
attributes associated with a file as a directory.
|
|
</p>
|
|
<p>If <var class="var">directory</var> is ‘<samp class="samp">-</samp>’, it is converted to <code class="env">$OLDPWD</code>
|
|
before attempting the directory change.
|
|
</p>
|
|
<p>If <code class="code">cd</code> uses a non-empty directory name from <code class="env">CDPATH</code>, or if
|
|
‘<samp class="samp">-</samp>’ is the first argument, and the directory change is
|
|
successful, <code class="code">cd</code> writes the absolute pathname of the new
|
|
working directory to the standard output.
|
|
</p>
|
|
<p>If the directory change is successful, <code class="code">cd</code> sets the value of the
|
|
<code class="env">PWD</code> environment variable to the new directory name, and sets the
|
|
<code class="env">OLDPWD</code> environment variable to the value of the current working
|
|
directory before the change.
|
|
</p>
|
|
<p>The return status is zero if the directory is successfully changed,
|
|
non-zero otherwise.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-continue"></a><span><code class="code">continue</code><a class="copiable-link" href="#index-continue"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">continue [<var class="var">n</var>]
|
|
</pre></div>
|
|
|
|
<p><code class="code">continue</code> resumes the next iteration of an enclosing <code class="code">for</code>,
|
|
<code class="code">while</code>, <code class="code">until</code>, or <code class="code">select</code> loop.
|
|
If <var class="var">n</var> is supplied, Bash resumes the execution of the <var class="var">n</var>th
|
|
enclosing loop.
|
|
<var class="var">n</var> must be greater than or equal to 1.
|
|
The return status is zero unless <var class="var">n</var> is not greater than or equal to 1.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-eval"></a><span><code class="code">eval</code><a class="copiable-link" href="#index-eval"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">eval [<var class="var">arguments</var>]
|
|
</pre></div>
|
|
|
|
<p>The <var class="var">arguments</var> are concatenated together into a single command,
|
|
separated by spaces.
|
|
Bash then reads and executes this command and returns its exit status
|
|
as the exit status of <code class="code">eval</code>.
|
|
If there are no arguments or only empty arguments, the return status is
|
|
zero.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-exec"></a><span><code class="code">exec</code><a class="copiable-link" href="#index-exec"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">exec [-cl] [-a <var class="var">name</var>] [<var class="var">command</var> [<var class="var">arguments</var>]]
|
|
</pre></div>
|
|
|
|
<p>If <var class="var">command</var>
|
|
is supplied, it replaces the shell without creating a new process.
|
|
<var class="var">command</var> cannot be a shell builtin or function.
|
|
The <var class="var">arguments</var> become the arguments to <var class="var">command</var>
|
|
If the <samp class="option">-l</samp> option is supplied, the shell places a dash at the
|
|
beginning of the zeroth argument passed to <var class="var">command</var>.
|
|
This is what the <code class="code">login</code> program does.
|
|
The <samp class="option">-c</samp> option causes <var class="var">command</var> to be executed with an empty
|
|
environment.
|
|
If <samp class="option">-a</samp> is supplied, the shell passes <var class="var">name</var> as the zeroth
|
|
argument to <var class="var">command</var>.
|
|
</p>
|
|
<p>If <var class="var">command</var>
|
|
cannot be executed for some reason, a non-interactive shell exits,
|
|
unless the <code class="code">execfail</code> shell option is enabled.
|
|
In that case, it returns a non-zero status.
|
|
An interactive shell returns a non-zero status if the file cannot be executed.
|
|
A subshell exits unconditionally if <code class="code">exec</code> fails.
|
|
</p>
|
|
<p>If <var class="var">command</var> is not specified, redirections may be used to affect
|
|
the current shell environment.
|
|
If there are no redirection errors, the return status is zero;
|
|
otherwise the return status is non-zero.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-exit"></a><span><code class="code">exit</code><a class="copiable-link" href="#index-exit"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">exit [<var class="var">n</var>]
|
|
</pre></div>
|
|
|
|
<p>Exit the shell, returning a status of <var class="var">n</var> to the shell’s parent.
|
|
If <var class="var">n</var> is omitted, the exit status is that of the last command executed.
|
|
Any trap on <code class="code">EXIT</code> is executed before the shell terminates.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-export"></a><span><code class="code">export</code><a class="copiable-link" href="#index-export"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">export [-fn] [-p] [<var class="var">name</var>[=<var class="var">value</var>]]
|
|
</pre></div>
|
|
|
|
<p>Mark each <var class="var">name</var> to be passed to subsequently executed commands in the
|
|
environment.
|
|
If the <samp class="option">-f</samp> option is supplied, the <var class="var">name</var>s
|
|
refer to shell functions; otherwise the names refer to shell variables.
|
|
</p>
|
|
<p>The <samp class="option">-n</samp> option means to unexport each name: no longer mark
|
|
it for export.
|
|
If no <var class="var">name</var>s are supplied, or if only
|
|
the <samp class="option">-p</samp> option is given,
|
|
<code class="code">export</code> displays a list of names of all exported
|
|
variables on the standard output.
|
|
Using <samp class="option">-p</samp> and <samp class="option">-f</samp> together displays exported functions.
|
|
The <samp class="option">-p</samp> option displays output in a form that may be reused as input.
|
|
</p>
|
|
<p><code class="code">export</code> allows the value of a variable to be set at the same time
|
|
it is exported or unexported by following the variable name with
|
|
=<var class="var">value</var>.
|
|
This sets the value of the variable is to <var class="var">value</var> while modifying
|
|
the export attribute.
|
|
</p>
|
|
<p>The return status is zero unless an invalid option is supplied, one of
|
|
the names is not a valid shell variable name, or <samp class="option">-f</samp> is supplied
|
|
with a name that is not a shell function.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-false"></a><span><code class="code">false</code><a class="copiable-link" href="#index-false"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">false
|
|
</pre></div>
|
|
|
|
<p>Does nothing; returns a non-zero status.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-getopts"></a><span><code class="code">getopts</code><a class="copiable-link" href="#index-getopts"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">getopts <var class="var">optstring</var> <var class="var">name</var> [<var class="var">arg</var> ...]
|
|
</pre></div>
|
|
|
|
<p><code class="code">getopts</code> is used by shell scripts or functions to parse positional
|
|
parameters and obtain options and their arguments.
|
|
<var class="var">optstring</var> contains the option characters to be recognized; if a
|
|
character is followed by a colon, the option is expected to have an
|
|
argument, which should be separated from it by whitespace.
|
|
The colon (‘<samp class="samp">:</samp>’) and question mark (‘<samp class="samp">?</samp>’) may not be
|
|
used as option characters.
|
|
</p>
|
|
<p>Each time it is invoked, <code class="code">getopts</code>
|
|
places the next option in the shell variable <var class="var">name</var>, initializing
|
|
<var class="var">name</var> if it does not exist,
|
|
and the index of the next argument to be processed into the
|
|
variable <code class="env">OPTIND</code>.
|
|
<code class="env">OPTIND</code> is initialized to 1 each time the shell or a shell script
|
|
is invoked.
|
|
When an option requires an argument,
|
|
<code class="code">getopts</code> places that argument into the variable <code class="env">OPTARG</code>.
|
|
</p>
|
|
<p>The shell does not reset <code class="env">OPTIND</code> automatically; it must be manually
|
|
reset between multiple calls to <code class="code">getopts</code> within the same shell
|
|
invocation to use a new set of parameters.
|
|
</p>
|
|
<p>When it reaches the end of options, <code class="code">getopts</code> exits with a
|
|
return value greater than zero.
|
|
<code class="env">OPTIND</code> is set to the index of the first non-option argument,
|
|
and <var class="var">name</var> is set to ‘<samp class="samp">?</samp>’.
|
|
</p>
|
|
<p><code class="code">getopts</code>
|
|
normally parses the positional parameters, but if more arguments are
|
|
supplied as <var class="var">arg</var> values, <code class="code">getopts</code> parses those instead.
|
|
</p>
|
|
<p><code class="code">getopts</code> can report errors in two ways.
|
|
If the first character of
|
|
<var class="var">optstring</var> is a colon, <code class="code">getopts</code> uses <em class="emph">silent</em>
|
|
error reporting.
|
|
In normal operation, <code class="code">getopts</code> prints diagnostic messages
|
|
when it encounters invalid options or missing option arguments.
|
|
If the variable <code class="env">OPTERR</code>
|
|
is set to 0, <code class="code">getopts</code> does not display any error messages,
|
|
even if the first character of <code class="code">optstring</code> is not a colon.
|
|
</p>
|
|
<p>If <code class="code">getopts</code> detects an invalid option, it
|
|
places ‘<samp class="samp">?</samp>’ into <var class="var">name</var> and, if not silent,
|
|
prints an error message and unsets <code class="env">OPTARG</code>.
|
|
If <code class="code">getopts</code> is silent, it assigns the option character found
|
|
to <code class="env">OPTARG</code> and does not print a diagnostic message.
|
|
</p>
|
|
<p>If a required argument is not found,
|
|
and <code class="code">getopts</code> is not silent,
|
|
it sets the value of <var class="var">name</var> to a question mark (‘<samp class="samp">?</samp>’),
|
|
unsets <code class="code">OPTARG</code>, and prints a diagnostic message.
|
|
If <code class="code">getopts</code> is silent,
|
|
it sets the value of <var class="var">name</var> to a colon (‘<samp class="samp">:</samp>’),
|
|
and sets <code class="env">OPTARG</code> to the option character found.
|
|
</p>
|
|
<p><code class="code">getopts</code> returns true if an option, specified or unspecified,
|
|
is found.
|
|
It returns false when it encounters the end of options or if an error occurs.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-hash"></a><span><code class="code">hash</code><a class="copiable-link" href="#index-hash"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">hash [-r] [-p <var class="var">filename</var>] [-dt] [<var class="var">name</var>]
|
|
</pre></div>
|
|
|
|
<p>Each time <code class="code">hash</code> is invoked, it remembers the full filenames of the
|
|
commands specified as <var class="var">name</var> arguments,
|
|
so they need not be searched for on subsequent invocations.
|
|
The commands are found by searching through the directories listed in
|
|
<code class="env">$PATH</code>.
|
|
Any previously-remembered filename associated with <var class="var">name</var> is discarded.
|
|
The <samp class="option">-p</samp> option inhibits the path search, and <code class="code">hash</code> uses
|
|
<var class="var">filename</var> as the location of <var class="var">name</var>.
|
|
</p>
|
|
<p>The <samp class="option">-r</samp> option causes the shell to forget all remembered locations.
|
|
Assigning to the <code class="env">PATH</code> variable also clears all hashed filenames.
|
|
The <samp class="option">-d</samp> option causes the shell to forget the remembered location
|
|
of each <var class="var">name</var>.
|
|
</p>
|
|
<p>If the <samp class="option">-t</samp> option is supplied, <code class="code">hash</code> prints the full pathname
|
|
corresponding to each <var class="var">name</var>.
|
|
If multiple <var class="var">name</var> arguments are
|
|
supplied with <samp class="option">-t</samp>, <code class="code">hash</code> prints each <var class="var">name</var>
|
|
before the corresponding hashed full path.
|
|
The <samp class="option">-l</samp> option displays output in a format that may be reused as input.
|
|
</p>
|
|
<p>If no arguments are given, or if only <samp class="option">-l</samp> is supplied,
|
|
<code class="code">hash</code> prints information about remembered commands.
|
|
The <samp class="option">-t</samp>, <samp class="option">-d</samp>, and <samp class="option">-p</samp> options (the options that
|
|
act on the <var class="var">name</var> arguments) are mutually exclusive.
|
|
Only one will be active.
|
|
If more than one is supplied, <samp class="option">-t</samp> has higher priority than
|
|
<samp class="option">-p</samp>, and both have higher priority than <samp class="option">-d</samp>.
|
|
</p>
|
|
<p>The return status is zero unless a <var class="var">name</var> is not found or an invalid
|
|
option is supplied.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-pwd"></a><span><code class="code">pwd</code><a class="copiable-link" href="#index-pwd"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">pwd [-LP]
|
|
</pre></div>
|
|
|
|
<p>Print the absolute pathname of the current working directory.
|
|
If the <samp class="option">-P</samp> option is supplied,
|
|
or the <samp class="option">-o physical</samp> option to the <code class="code">set</code> builtin
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>) is enabled,
|
|
the pathname printed will not
|
|
contain symbolic links.
|
|
If the <samp class="option">-L</samp> option is supplied, the pathname printed may contain
|
|
symbolic links.
|
|
The return status is zero unless an error is encountered while
|
|
determining the name of the current directory or an invalid option
|
|
is supplied.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-readonly"></a><span><code class="code">readonly</code><a class="copiable-link" href="#index-readonly"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">readonly [-aAf] [-p] [<var class="var">name</var>[=<var class="var">value</var>]] ...
|
|
</pre></div>
|
|
|
|
<p>Mark each <var class="var">name</var> as readonly.
|
|
The values of these names may not be changed by subsequent assignment
|
|
or unset.
|
|
If the <samp class="option">-f</samp> option is supplied, each <var class="var">name</var> refers to a shell
|
|
function.
|
|
The <samp class="option">-a</samp> option means each <var class="var">name</var> refers to an indexed
|
|
array variable; the <samp class="option">-A</samp> option means each <var class="var">name</var> refers
|
|
to an associative array variable.
|
|
If both options are supplied, <samp class="option">-A</samp> takes precedence.
|
|
If no <var class="var">name</var> arguments are supplied, or if the <samp class="option">-p</samp>
|
|
option is supplied, print a list of all readonly names.
|
|
The other options may be used to restrict the output to a subset of
|
|
the set of readonly names.
|
|
The <samp class="option">-p</samp>
|
|
option displays output in a format that may be reused as input.
|
|
</p>
|
|
<p><code class="code">readonly</code> allows the value of a variable to be set at the same time
|
|
the readonly attribute is changed by following the variable name with
|
|
=<var class="var">value</var>.
|
|
This sets the value of the variable is to <var class="var">value</var> while modifying
|
|
the readonly attribute.
|
|
</p>
|
|
<p>The return status is zero unless an invalid option is supplied, one of
|
|
the <var class="var">name</var> arguments is not a valid shell variable or function name,
|
|
or the <samp class="option">-f</samp> option is supplied with a name that is not a shell function.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-return"></a><span><code class="code">return</code><a class="copiable-link" href="#index-return"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">return [<var class="var">n</var>]
|
|
</pre></div>
|
|
|
|
<p>Stop executing a shell function or sourced file and return the value <var class="var">n</var>
|
|
to its caller.
|
|
If <var class="var">n</var> is not supplied, the return value is the exit status of the
|
|
last command executed.
|
|
If <code class="code">return</code> is executed by a trap handler, the last command used to
|
|
determine the status is the last command executed before the trap handler.
|
|
If <code class="code">return</code> is executed during a <code class="code">DEBUG</code> trap, the last command
|
|
used to determine the status is the last command executed by the trap
|
|
handler before <code class="code">return</code> was invoked.
|
|
</p>
|
|
<p>When <code class="code">return</code> is used to terminate execution of a script
|
|
being executed with the <code class="code">.</code> (<code class="code">source</code>) builtin, it
|
|
returns either <var class="var">n</var> or
|
|
the exit status of the last command executed within the script as the exit
|
|
status of the script.
|
|
If <var class="var">n</var> is supplied, the return value is its least significant
|
|
8 bits.
|
|
</p>
|
|
<p>Any command associated with the <code class="code">RETURN</code> trap is executed
|
|
before execution resumes after the function or script.
|
|
</p>
|
|
<p>The return status is non-zero if <code class="code">return</code> is supplied a non-numeric
|
|
argument or is used outside a function
|
|
and not during the execution of a script by <code class="code">.</code> or <code class="code">source</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-shift"></a><span><code class="code">shift</code><a class="copiable-link" href="#index-shift"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">shift [<var class="var">n</var>]
|
|
</pre></div>
|
|
|
|
<p>Shift the positional parameters to the left by <var class="var">n</var>:
|
|
the positional parameters from <var class="var">n</var>+1 … <code class="code">$#</code> are
|
|
renamed to <code class="code">$1</code> … <code class="code">$#</code>-<var class="var">n</var>.
|
|
Parameters represented by the numbers <code class="code">$#</code> down to <code class="code">$#</code>-<var class="var">n</var>+1
|
|
are unset.
|
|
<var class="var">n</var> must be a non-negative number less than or equal to <code class="code">$#</code>.
|
|
If <var class="var">n</var> is not supplied, it is assumed to be 1.
|
|
If <var class="var">n</var> is zero or greater than <code class="code">$#</code>, the positional parameters
|
|
are not changed.
|
|
The return status is zero unless <var class="var">n</var> is greater than <code class="code">$#</code> or
|
|
less than zero, non-zero otherwise.
|
|
</p>
|
|
</dd>
|
|
<dt><a class="index-entry-id" id="index-_005b"></a>
|
|
<a id="index-test"></a><span><code class="code">test</code><a class="copiable-link" href="#index-test"> ¶</a></span></dt>
|
|
<dt><code class="code">[</code></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">test <var class="var">expr</var>
|
|
</pre></div>
|
|
|
|
<p>Evaluate a conditional expression <var class="var">expr</var> and return a status of
|
|
0 (true) or 1 (false).
|
|
Each operator and operand must be a separate argument.
|
|
Expressions are composed of the primaries described below in
|
|
<a class="ref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>.
|
|
<code class="code">test</code> does not accept any options, nor does it accept and
|
|
ignore an argument of <samp class="option">--</samp> as signifying the end of options.
|
|
When using the <code class="code">[</code> form, the last argument to the command must
|
|
be a <code class="code">]</code>.
|
|
</p>
|
|
<p>Expressions may be combined using the following operators, listed in
|
|
decreasing order of precedence.
|
|
The evaluation depends on the number of arguments; see below.
|
|
<code class="code">test</code> uses operator precedence when there are five or more arguments.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">! <var class="var">expr</var></code></dt>
|
|
<dd><p>True if <var class="var">expr</var> is false.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">( <var class="var">expr</var> )</code></dt>
|
|
<dd><p>Returns the value of <var class="var">expr</var>.
|
|
This may be used to override normal operator precedence.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">expr1</var> -a <var class="var">expr2</var></code></dt>
|
|
<dd><p>True if both <var class="var">expr1</var> and <var class="var">expr2</var> are true.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">expr1</var> -o <var class="var">expr2</var></code></dt>
|
|
<dd><p>True if either <var class="var">expr1</var> or <var class="var">expr2</var> is true.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The <code class="code">test</code> and <code class="code">[</code> builtins evaluate conditional
|
|
expressions using a set of rules based on the number of arguments.
|
|
</p>
|
|
<dl class="table">
|
|
<dt>0 arguments</dt>
|
|
<dd><p>The expression is false.
|
|
</p>
|
|
</dd>
|
|
<dt>1 argument</dt>
|
|
<dd><p>The expression is true if, and only if, the argument is not null.
|
|
</p>
|
|
</dd>
|
|
<dt>2 arguments</dt>
|
|
<dd><p>If the first argument is ‘<samp class="samp">!</samp>’, the expression is true if and
|
|
only if the second argument is null.
|
|
If the first argument is one of the unary conditional operators
|
|
(see <a class="pxref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the expression
|
|
is true if the unary test is true.
|
|
If the first argument is not a valid unary operator, the expression is
|
|
false.
|
|
</p>
|
|
</dd>
|
|
<dt>3 arguments</dt>
|
|
<dd><p>The following conditions are applied in the order listed.
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> If the second argument is one of the binary conditional
|
|
operators (see <a class="pxref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the
|
|
result of the expression is the result of the binary test using the
|
|
first and third arguments as operands.
|
|
The ‘<samp class="samp">-a</samp>’ and ‘<samp class="samp">-o</samp>’ operators are considered binary operators
|
|
when there are three arguments.
|
|
</li><li> If the first argument is ‘<samp class="samp">!</samp>’, the value is the negation of
|
|
the two-argument test using the second and third arguments.
|
|
</li><li> If the first argument is exactly ‘<samp class="samp">(</samp>’ and the third argument is
|
|
exactly ‘<samp class="samp">)</samp>’, the result is the one-argument test of the second
|
|
argument.
|
|
</li><li> Otherwise, the expression is false.
|
|
</li></ol>
|
|
|
|
</dd>
|
|
<dt>4 arguments</dt>
|
|
<dd><p>The following conditions are applied in the order listed.
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> If the first argument is ‘<samp class="samp">!</samp>’, the result is the negation of
|
|
the three-argument expression composed of the remaining arguments.
|
|
</li><li> If the first argument is exactly ‘<samp class="samp">(</samp>’ and the fourth argument is
|
|
exactly ‘<samp class="samp">)</samp>’, the result is the two-argument test of the second
|
|
and third arguments.
|
|
</li><li> Otherwise, the expression is parsed and evaluated according to
|
|
precedence using the rules listed above.
|
|
</li></ol>
|
|
|
|
</dd>
|
|
<dt>5 or more arguments</dt>
|
|
<dd><p>The expression is parsed and evaluated according to precedence
|
|
using the rules listed above.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If the shell is in <small class="sc">POSIX</small> mode, or if the expression is part
|
|
of the <code class="code">[[</code> command,
|
|
the ‘<samp class="samp"><</samp>’ and ‘<samp class="samp">></samp>’ operators sort using the current locale.
|
|
If the shell is not in <small class="sc">POSIX</small> mode, the <code class="code">test</code> and ‘<samp class="samp">[</samp>’
|
|
commands sort lexicographically using ASCII ordering.
|
|
</p>
|
|
<p>The historical operator-precedence parsing with 4 or more arguments can
|
|
lead to ambiguities when it encounters strings that look like primaries.
|
|
The
|
|
<small class="sc">POSIX</small>
|
|
standard has deprecated the <samp class="option">-a</samp> and <samp class="option">-o</samp>
|
|
primaries and enclosing expressions within parentheses.
|
|
Scripts should no longer use them.
|
|
It’s much more reliable to restrict test invocations to a single primary,
|
|
and to replace uses of <samp class="option">-a</samp> and <samp class="option">-o</samp> with the shell’s
|
|
<code class="code">&&</code> and <code class="code">||</code> list operators. For example, use
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">test -n string1 && test -n string2
|
|
</pre></div>
|
|
|
|
<p>instead of
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">test -n string1 -a -n string2
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><a id="index-times"></a><span><code class="code">times</code><a class="copiable-link" href="#index-times"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">times
|
|
</pre></div>
|
|
|
|
<p>Print out the user and system times used by the shell and its children.
|
|
The return status is zero.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-trap"></a><span><code class="code">trap</code><a class="copiable-link" href="#index-trap"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">trap [-lpP] [<var class="var">action</var>] [<var class="var">sigspec</var> ...]
|
|
</pre></div>
|
|
|
|
<p>The <var class="var">action</var> is a command that is read and executed when the
|
|
shell receives any of the signals <var class="var">sigspec</var>.
|
|
If <var class="var">action</var> is absent (and
|
|
there is a single <var class="var">sigspec</var>) or
|
|
equal to ‘<samp class="samp">-</samp>’, each specified <var class="var">sigspec</var>’s disposition is reset
|
|
to the value it had when the shell was started.
|
|
If <var class="var">action</var> is the null string, then the signal specified by
|
|
each <var class="var">sigspec</var> is ignored by the shell and commands it invokes.
|
|
</p>
|
|
<p>If no arguments are supplied, <code class="code">trap</code> prints the actions
|
|
associated with each trapped signal
|
|
as a set of <code class="code">trap</code> commands that can be reused as shell input to
|
|
restore the current signal dispositions.
|
|
</p>
|
|
<p>If <var class="var">action</var> is not present and <samp class="option">-p</samp> has been supplied,
|
|
<code class="code">trap</code> displays the trap commands associated with each <var class="var">sigspec</var>,
|
|
or, if no <var class="var">sigspec</var>s are supplied, for all trapped signals,
|
|
as a set of <code class="code">trap</code> commands that can be reused as shell input to
|
|
restore the current signal dispositions.
|
|
The <samp class="option">-P</samp> option behaves similarly, but displays only the actions
|
|
associated with each <var class="var">sigspec</var> argument.
|
|
<samp class="option">-P</samp> requires at least one <var class="var">sigspec</var> argument.
|
|
The <samp class="option">-P</samp> or <samp class="option">-p</samp> options may be
|
|
used in a subshell environment (e.g., command substitution) and,
|
|
as long as they are used before <code class="code">trap</code> is used to change a
|
|
signal’s handling, will display the state of its parent’s traps.
|
|
</p>
|
|
<p>The <samp class="option">-l</samp> option prints a list of signal names
|
|
and their corresponding numbers.
|
|
Each <var class="var">sigspec</var> is either a signal name or a signal number.
|
|
Signal names are case insensitive and the <code class="code">SIG</code> prefix is optional.
|
|
If <samp class="option">-l</samp> is supplied with no <var class="var">sigspec</var> arguments, it prints a
|
|
list of valid signal names.
|
|
</p>
|
|
<p>If a <var class="var">sigspec</var>
|
|
is <code class="code">0</code> or <code class="code">EXIT</code>, <var class="var">action</var> is executed when the shell exits.
|
|
If a <var class="var">sigspec</var> is <code class="code">DEBUG</code>, <var class="var">action</var> is executed
|
|
before every simple command, <code class="code">for</code> command, <code class="code">case</code> command,
|
|
<code class="code">select</code> command, (( arithmetic command, [[ conditional command,
|
|
arithmetic <code class="code">for</code> command,
|
|
and before the first command executes in a shell function.
|
|
Refer to the description of the <code class="code">extdebug</code> shell option
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) for details of its
|
|
effect on the <code class="code">DEBUG</code> trap.
|
|
If a <var class="var">sigspec</var> is <code class="code">RETURN</code>, <var class="var">action</var> is executed
|
|
each time a shell function or a script executed with the <code class="code">.</code> or
|
|
<code class="code">source</code> builtins finishes executing.
|
|
</p>
|
|
<p>If a <var class="var">sigspec</var> is <code class="code">ERR</code>, <var class="var">action</var>
|
|
is executed whenever
|
|
a pipeline (which may consist of a single simple
|
|
command), a list, or a compound command returns a
|
|
non-zero exit status,
|
|
subject to the following conditions.
|
|
The <code class="code">ERR</code> trap is not executed if the failed command is part of the
|
|
command list immediately following an
|
|
<code class="code">until</code> or <code class="code">while</code> reserved word,
|
|
part of the test following the <code class="code">if</code> or <code class="code">elif</code> reserved words,
|
|
part of a command executed in a <code class="code">&&</code> or <code class="code">||</code> list
|
|
except the command following the final <code class="code">&&</code> or <code class="code">||</code>,
|
|
any command in a pipeline but the last,
|
|
(subject to the state of the <code class="code">pipefail</code> shell option),
|
|
or if the command’s return
|
|
status is being inverted using <code class="code">!</code>.
|
|
These are the same conditions obeyed by the <code class="code">errexit</code> (<samp class="option">-e</samp>)
|
|
option.
|
|
</p>
|
|
<p>When the shell is not interactive,
|
|
signals ignored upon entry to a non-interactive shell cannot be trapped or
|
|
reset.
|
|
Interactive shells permit trapping signals ignored on entry.
|
|
Trapped signals that are not being ignored are reset to their original
|
|
values in a subshell or subshell environment when one is created.
|
|
</p>
|
|
<p>The return status is zero unless a <var class="var">sigspec</var> does not specify a
|
|
valid signal; non-zero otherwise.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-true"></a><span><code class="code">true</code><a class="copiable-link" href="#index-true"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">true
|
|
</pre></div>
|
|
|
|
<p>Does nothing, returns a 0 status.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-umask"></a><span><code class="code">umask</code><a class="copiable-link" href="#index-umask"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">umask [-p] [-S] [<var class="var">mode</var>]
|
|
</pre></div>
|
|
|
|
<p>Set the shell process’s file creation mask to <var class="var">mode</var>.
|
|
If <var class="var">mode</var> begins with a digit, it is interpreted as an octal number;
|
|
if not, it is interpreted as a symbolic mode mask similar
|
|
to that accepted by the <code class="code">chmod</code> command.
|
|
If <var class="var">mode</var> is omitted, <code class="code">umask</code> prints the current value of the mask.
|
|
If the <samp class="option">-S</samp>
|
|
option is supplied without a <var class="var">mode</var> argument, <code class="code">umask</code>
|
|
prints the mask in a symbolic format;
|
|
the default output is an octal number.
|
|
If the <samp class="option">-p</samp> option is supplied, and <var class="var">mode</var>
|
|
is omitted, the output is in a form that may be reused as input.
|
|
The return status is zero if the mode is successfully changed or if
|
|
no <var class="var">mode</var> argument is supplied, and non-zero otherwise.
|
|
</p>
|
|
<p>Note that when the mode is interpreted as an octal number, each number
|
|
of the umask is subtracted from <code class="code">7</code>. Thus, a umask of <code class="code">022</code>
|
|
results in permissions of <code class="code">755</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-unset"></a><span><code class="code">unset</code><a class="copiable-link" href="#index-unset"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">unset [-fnv] [<var class="var">name</var>]
|
|
</pre></div>
|
|
|
|
<p>Remove each variable or function <var class="var">name</var>.
|
|
If the <samp class="option">-v</samp> option is given, each
|
|
<var class="var">name</var> refers to a shell variable and that variable is removed.
|
|
If the <samp class="option">-f</samp> option is given, the <var class="var">name</var>s refer to shell
|
|
functions, and the function definition is removed.
|
|
If the <samp class="option">-n</samp> option is supplied, and <var class="var">name</var> is a variable with
|
|
the <code class="code">nameref</code> attribute, <var class="var">name</var> will be unset rather than the
|
|
variable it references.
|
|
<samp class="option">-n</samp> has no effect if the <samp class="option">-f</samp> option is supplied.
|
|
If no options are supplied, each <var class="var">name</var> refers to a variable; if
|
|
there is no variable by that name, a function with that name, if any, is
|
|
unset.
|
|
Readonly variables and functions may not be unset.
|
|
When variables or functions are removed, they are also removed
|
|
from the environment passed to subsequent commands.
|
|
Some shell variables may not be unset.
|
|
Some shell variables lose their special behavior if they are unset; such
|
|
behavior is noted in the description of the individual variables.
|
|
The return status is zero unless a <var class="var">name</var> is readonly or may not be unset.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Bash-Builtins">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Modifying-Shell-Behavior" accesskey="n" rel="next">Modifying Shell Behavior</a>, Previous: <a href="#Bourne-Shell-Builtins" accesskey="p" rel="prev">Bourne Shell Builtins</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bash-Builtin-Commands"><span>4.2 Bash Builtin Commands<a class="copiable-link" href="#Bash-Builtin-Commands"> ¶</a></span></h3>
|
|
|
|
<p>This section describes builtin commands which are unique to
|
|
or have been extended in Bash.
|
|
Some of these commands are specified in the <small class="sc">POSIX</small> standard.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a id="index-alias"></a><span><code class="code">alias</code><a class="copiable-link" href="#index-alias"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">alias [-p] [<var class="var">name</var>[=<var class="var">value</var>] ...]
|
|
</pre></div>
|
|
|
|
<p>Without arguments or with the <samp class="option">-p</samp> option, <code class="code">alias</code> prints
|
|
the list of aliases on the standard output in a form that allows
|
|
them to be reused as input.
|
|
If arguments are supplied, define an alias for each <var class="var">name</var>
|
|
whose <var class="var">value</var> is given.
|
|
If no <var class="var">value</var> is given, print the name and value of the alias <var class="var">name</var>.
|
|
A trailing space in <var class="var">value</var> causes the next word to be
|
|
checked for alias substitution when the alias is expanded
|
|
during command parsing.
|
|
<code class="code">alias</code> returns true unless a <var class="var">name</var> is given
|
|
(without a corresponding =<var class="var">value</var>)
|
|
for which no alias has been defined.
|
|
Aliases are described in <a class="ref" href="#Aliases">Aliases</a>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-bind"></a><span><code class="code">bind</code><a class="copiable-link" href="#index-bind"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">bind [-m <var class="var">keymap</var>] [-lsvSVX]
|
|
bind [-m <var class="var">keymap</var>] [-q <var class="var">function</var>] [-u <var class="var">function</var>] [-r <var class="var">keyseq</var>]
|
|
bind [-m <var class="var">keymap</var>] -f <var class="var">filename</var>
|
|
bind [-m <var class="var">keymap</var>] -x <var class="var">keyseq[: ]shell-command</var>
|
|
bind [-m <var class="var">keymap</var>] <var class="var">keyseq:function-name</var>
|
|
bind [-m <var class="var">keymap</var>] <var class="var">keyseq:readline-command</var>
|
|
bind [-m <var class="var">keymap</var>] -p|-P [<var class="var">readline-command</var>]
|
|
bind <var class="var">readline-command-line</var>
|
|
</pre></div>
|
|
|
|
<p>Display current Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>)
|
|
key and function bindings,
|
|
bind a key sequence to a Readline function or macro
|
|
or to a shell command,
|
|
or set a Readline variable.
|
|
Each non-option argument is a key binding or command as it would appear in a
|
|
Readline initialization file (see <a class="pxref" href="#Readline-Init-File">Readline Init File</a>),
|
|
but each binding or command must be passed as a separate argument; e.g.,
|
|
‘<samp class="samp">"\C-x\C-r":re-read-init-file</samp>’.
|
|
</p>
|
|
<p>In the following descriptions, options that display output in a form
|
|
available to be re-read format their output
|
|
as commands that would appear in a Readline initialization file or
|
|
that would be supplied as individual arguments to a <code class="code">bind</code> command.
|
|
</p>
|
|
<p>Options, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-m <var class="var">keymap</var></code></dt>
|
|
<dd><p>Use <var class="var">keymap</var> as the keymap to be affected by
|
|
the subsequent bindings. Acceptable <var class="var">keymap</var>
|
|
names are
|
|
<code class="code">emacs</code>,
|
|
<code class="code">emacs-standard</code>,
|
|
<code class="code">emacs-meta</code>,
|
|
<code class="code">emacs-ctlx</code>,
|
|
<code class="code">vi</code>,
|
|
<code class="code">vi-move</code>,
|
|
<code class="code">vi-command</code>, and
|
|
<code class="code">vi-insert</code>.
|
|
<code class="code">vi</code> is equivalent to <code class="code">vi-command</code>
|
|
(<code class="code">vi-move</code> is also a synonym);
|
|
<code class="code">emacs</code> is equivalent to <code class="code">emacs-standard</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-l</code></dt>
|
|
<dd><p>List the names of all Readline functions.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-p</code></dt>
|
|
<dd><p>Display Readline function names and bindings
|
|
in such a way that they can be used as an argument to a subsequent
|
|
<code class="code">bind</code> command or in a Readline initialization file.
|
|
If arguments remain after option processing, <code class="code">bind</code> treats
|
|
them as readline command names and restricts output to those names.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-P</code></dt>
|
|
<dd><p>List current Readline function names and bindings.
|
|
If arguments remain after option processing, <code class="code">bind</code> treats
|
|
them as readline command names and restricts output to those names.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>Display Readline key sequences bound to macros and the strings
|
|
they output in such a way that they can be used as
|
|
an argument to a subsequent <code class="code">bind</code> command
|
|
or in a Readline initialization file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-S</code></dt>
|
|
<dd><p>Display Readline key sequences bound to macros and the strings they output.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-v</code></dt>
|
|
<dd><p>Display Readline variable names and values
|
|
in such a way that they can be used as
|
|
an argument to a subsequent <code class="code">bind</code> command
|
|
or in a Readline initialization file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-V</code></dt>
|
|
<dd><p>List current Readline variable names and values.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-f <var class="var">filename</var></code></dt>
|
|
<dd><p>Read key bindings from <var class="var">filename</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-q <var class="var">function</var></code></dt>
|
|
<dd><p>Display key sequences that invoke the named Readline <var class="var">function</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-u <var class="var">function</var></code></dt>
|
|
<dd><p>Unbind all key sequences bound to the named Readline <var class="var">function</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r <var class="var">keyseq</var></code></dt>
|
|
<dd><p>Remove any current binding for <var class="var">keyseq</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-x <var class="var">keyseq:shell-command</var></code></dt>
|
|
<dd><p>Cause <var class="var">shell-command</var> to be executed whenever <var class="var">keyseq</var> is
|
|
entered.
|
|
The separator between <var class="var">keyseq</var> and <var class="var">shell-command</var> is either
|
|
whitespace or a colon optionally followed by whitespace.
|
|
If the separator is whitespace, <var class="var">shell-command</var>
|
|
must be enclosed in double quotes and Readline expands any of its
|
|
special backslash-escapes in <var class="var">shell-command</var> before saving it.
|
|
If the separator is a colon, any enclosing double quotes are optional, and
|
|
Readline does not expand the command string before saving it.
|
|
Since the entire key binding expression must be a single argument, it
|
|
should be enclosed in single quotes.
|
|
When <var class="var">shell-command</var> is executed, the shell sets the
|
|
<code class="code">READLINE_LINE</code> variable to the contents of the Readline line
|
|
buffer
|
|
and the
|
|
<code class="code">READLINE_POINT</code> and <code class="code">READLINE_MARK</code>
|
|
variables to the current location of the insertion point and the saved
|
|
insertion point (the <var class="var">mark</var>), respectively.
|
|
The shell assigns any numeric argument the user supplied to the
|
|
<code class="code">READLINE_ARGUMENT</code> variable.
|
|
If there was no argument, that variable is not set.
|
|
If the executed command changes the value of any of
|
|
<code class="code">READLINE_LINE</code>, <code class="code">READLINE_POINT</code>, or <code class="code">READLINE_MARK</code>,
|
|
those new values will be reflected in the editing state.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-X</code></dt>
|
|
<dd><p>List all key sequences bound to shell commands and the associated commands
|
|
in a format that can be reused as
|
|
an argument to a subsequent <code class="code">bind</code> command.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The return status is zero unless an invalid option is supplied or an
|
|
error occurs.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-builtin"></a><span><code class="code">builtin</code><a class="copiable-link" href="#index-builtin"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">builtin [<var class="var">shell-builtin</var> [<var class="var">args</var>]]
|
|
</pre></div>
|
|
|
|
<p>Execute the specified shell builtin <var class="var">shell-builtin</var>,
|
|
passing it <var class="var">args</var>, and return its exit status.
|
|
This is useful when defining a shell function with the same
|
|
name as a shell builtin,
|
|
retaining the functionality of the builtin within the function.
|
|
The return status is non-zero if <var class="var">shell-builtin</var> is not a shell
|
|
builtin command.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-caller"></a><span><code class="code">caller</code><a class="copiable-link" href="#index-caller"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">caller [<var class="var">expr</var>]
|
|
</pre></div>
|
|
|
|
<p>Returns the context of any active subroutine call (a shell function or
|
|
a script executed with the <code class="code">.</code> or <code class="code">source</code> builtins).
|
|
</p>
|
|
<p>Without <var class="var">expr</var>, <code class="code">caller</code> displays the line number and source
|
|
filename of the current subroutine call.
|
|
If a non-negative integer is supplied as <var class="var">expr</var>, <code class="code">caller</code>
|
|
displays the line number, subroutine name, and source file corresponding
|
|
to that position in the current execution call stack.
|
|
This extra information may be used, for example, to print a stack trace.
|
|
The current frame is frame 0.
|
|
</p>
|
|
<p>The return value is 0 unless the shell is not executing a subroutine
|
|
call or <var class="var">expr</var> does not correspond to a valid position in the
|
|
call stack.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-command"></a><span><code class="code">command</code><a class="copiable-link" href="#index-command"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">command [-pVv] <var class="var">command</var> [<var class="var">arguments</var> ...]
|
|
</pre></div>
|
|
|
|
<p>The <code class="code">command</code> builtin runs <var class="var">command</var> with <var class="var">arguments</var>
|
|
ignoring any shell function named <var class="var">command</var>.
|
|
Only shell builtin commands or commands found by searching the
|
|
<code class="env">PATH</code> are executed.
|
|
If there is a shell function named <code class="code">ls</code>, running ‘<samp class="samp">command ls</samp>’
|
|
within the function will execute the external command <code class="code">ls</code>
|
|
instead of calling the function recursively.
|
|
The <samp class="option">-p</samp> option means to use a default value for <code class="env">PATH</code>
|
|
that is guaranteed to find all of the standard utilities.
|
|
The return status in this case is 127 if <var class="var">command</var> cannot be
|
|
found or an error occurred, and the exit status of <var class="var">command</var>
|
|
otherwise.
|
|
</p>
|
|
<p>If either the <samp class="option">-V</samp> or <samp class="option">-v</samp> option is supplied, <code class="code">command</code>
|
|
prints a description of <var class="var">command</var>.
|
|
The <samp class="option">-v</samp> option
|
|
displays a single word indicating the command or file name used to
|
|
invoke <var class="var">command</var>;
|
|
the <samp class="option">-V</samp> option produces a more verbose description.
|
|
In this case, the return status is
|
|
zero if <var class="var">command</var> is found, and non-zero if not.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-declare"></a><span><code class="code">declare</code><a class="copiable-link" href="#index-declare"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">declare [-aAfFgiIlnrtux] [-p] [<var class="var">name</var>[=<var class="var">value</var>] ...]
|
|
</pre></div>
|
|
|
|
<p>Declare variables and give them attributes.
|
|
If no <var class="var">name</var>s are given, then display the values of variables or
|
|
shell functions instead.
|
|
</p>
|
|
<p>The <samp class="option">-p</samp> option will display the attributes and values of each
|
|
<var class="var">name</var>.
|
|
When <samp class="option">-p</samp> is used with <var class="var">name</var> arguments, additional options,
|
|
other than <samp class="option">-f</samp> and <samp class="option">-F</samp>, are ignored.
|
|
</p>
|
|
<p>When <samp class="option">-p</samp> is supplied without <var class="var">name</var> arguments,
|
|
<code class="code">declare</code> will display the attributes and values
|
|
of all variables having the attributes specified by the additional options.
|
|
If no other options are supplied with <samp class="option">-p</samp>, <code class="code">declare</code> will
|
|
display the attributes and values of all shell variables.
|
|
The <samp class="option">-f</samp> option restricts the display to shell functions.
|
|
</p>
|
|
<p>The <samp class="option">-F</samp> option inhibits the display of function definitions;
|
|
only the function name and attributes are printed.
|
|
If the <code class="code">extdebug</code> shell option is enabled using <code class="code">shopt</code>
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), the source file name and line number where
|
|
each <var class="var">name</var> is defined are displayed as well.
|
|
<samp class="option">-F</samp> implies <samp class="option">-f</samp>.
|
|
</p>
|
|
<p>The <samp class="option">-g</samp> option forces variables to be created or modified at
|
|
the global scope, even when <code class="code">declare</code> is executed in a shell function.
|
|
It is ignored in when <code class="code">declare</code> is not executed in a shell function.
|
|
</p>
|
|
<p>The <samp class="option">-I</samp> option causes local variables to inherit the attributes
|
|
(except the <code class="code">nameref</code> attribute)
|
|
and value of any existing variable with the same
|
|
<var class="var">name</var> at a surrounding scope.
|
|
If there is no existing variable, the local variable is initially unset.
|
|
</p>
|
|
<p>The following options can be used to restrict output to variables with
|
|
the specified attributes or to give variables attributes:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-a</code></dt>
|
|
<dd><p>Each <var class="var">name</var> is an indexed array variable (see <a class="pxref" href="#Arrays">Arrays</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-A</code></dt>
|
|
<dd><p>Each <var class="var">name</var> is an associative array variable (see <a class="pxref" href="#Arrays">Arrays</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-f</code></dt>
|
|
<dd><p>Each <var class="var">name</var> refers to a shell function.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-i</code></dt>
|
|
<dd><p>The variable is to be treated as an integer;
|
|
arithmetic evaluation (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>) is
|
|
performed when the variable is assigned a value.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-l</code></dt>
|
|
<dd><p>When the variable is assigned a value, all upper-case characters are
|
|
converted to lower-case.
|
|
The upper-case attribute is disabled.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>Give each <var class="var">name</var> the <code class="code">nameref</code> attribute, making
|
|
it a name reference to another variable.
|
|
That other variable is defined by the value of <var class="var">name</var>.
|
|
All references, assignments, and attribute modifications
|
|
to <var class="var">name</var>, except for those using or changing the
|
|
<samp class="option">-n</samp> attribute itself, are performed on the variable referenced by
|
|
<var class="var">name</var>’s value.
|
|
The nameref attribute cannot be applied to array variables.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r</code></dt>
|
|
<dd><p>Make <var class="var">name</var>s readonly.
|
|
These names cannot then be assigned values
|
|
by subsequent assignment statements or unset.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-t</code></dt>
|
|
<dd><p>Give each <var class="var">name</var> the <code class="code">trace</code> attribute.
|
|
Traced functions inherit the <code class="code">DEBUG</code> and <code class="code">RETURN</code> traps from
|
|
the calling shell.
|
|
The trace attribute has no special meaning for variables.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-u</code></dt>
|
|
<dd><p>When the variable is assigned a value, all lower-case characters are
|
|
converted to upper-case.
|
|
The lower-case attribute is disabled.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-x</code></dt>
|
|
<dd><p>Mark each <var class="var">name</var> for export to subsequent commands via
|
|
the environment.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Using ‘<samp class="samp">+</samp>’ instead of ‘<samp class="samp">-</samp>’ turns off the specified
|
|
attribute instead, with the exceptions that ‘<samp class="samp">+a</samp>’ and ‘<samp class="samp">+A</samp>’
|
|
may not be used to destroy array variables and ‘<samp class="samp">+r</samp>’ will not
|
|
remove the readonly attribute.
|
|
</p>
|
|
<p>When used in a function, <code class="code">declare</code> makes each <var class="var">name</var> local,
|
|
as with the <code class="code">local</code> command, unless the <samp class="option">-g</samp> option is supplied.
|
|
If a variable name is followed by =<var class="var">value</var>, the value of the variable
|
|
is set to <var class="var">value</var>.
|
|
</p>
|
|
<p>When using <samp class="option">-a</samp> or <samp class="option">-A</samp> and the compound assignment syntax to
|
|
create array variables, additional attributes do not take effect until
|
|
subsequent assignments.
|
|
</p>
|
|
<p>The return status is zero unless an invalid option is encountered,
|
|
an attempt is made to define a function using ‘<samp class="samp">-f foo=bar</samp>’,
|
|
an attempt is made to assign a value to a readonly variable,
|
|
an attempt is made to assign a value to an array variable without
|
|
using the compound assignment syntax (see <a class="pxref" href="#Arrays">Arrays</a>),
|
|
one of the <var class="var">name</var>s is not a valid shell variable name,
|
|
an attempt is made to turn off readonly status for a readonly variable,
|
|
an attempt is made to turn off array status for an array variable,
|
|
or an attempt is made to display a non-existent function with <samp class="option">-f</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-echo"></a><span><code class="code">echo</code><a class="copiable-link" href="#index-echo"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">echo [-neE] [<var class="var">arg</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Output the <var class="var">arg</var>s, separated by spaces, terminated with a
|
|
newline.
|
|
The return status is 0 unless a write error occurs.
|
|
If <samp class="option">-n</samp> is specified, the trailing newline is not printed.
|
|
</p>
|
|
<p>If the <samp class="option">-e</samp> option is given, <code class="code">echo</code> interprets the following
|
|
backslash-escaped characters.
|
|
The <samp class="option">-E</samp> option disables interpretation of these escape characters,
|
|
even on systems where they are interpreted by default.
|
|
The <code class="code">xpg_echo</code> shell option determines
|
|
whether or not <code class="code">echo</code> interprets any options and
|
|
expands these escape characters.
|
|
<code class="code">echo</code> does not interpret <samp class="option">--</samp> to mean the end of options.
|
|
</p>
|
|
<p><code class="code">echo</code> interprets the following escape sequences:
|
|
</p><dl class="table">
|
|
<dt><code class="code">\a</code></dt>
|
|
<dd><p>alert (bell)
|
|
</p></dd>
|
|
<dt><code class="code">\b</code></dt>
|
|
<dd><p>backspace
|
|
</p></dd>
|
|
<dt><code class="code">\c</code></dt>
|
|
<dd><p>suppress further output
|
|
</p></dd>
|
|
<dt><code class="code">\e</code></dt>
|
|
<dt><code class="code">\E</code></dt>
|
|
<dd><p>escape
|
|
</p></dd>
|
|
<dt><code class="code">\f</code></dt>
|
|
<dd><p>form feed
|
|
</p></dd>
|
|
<dt><code class="code">\n</code></dt>
|
|
<dd><p>new line
|
|
</p></dd>
|
|
<dt><code class="code">\r</code></dt>
|
|
<dd><p>carriage return
|
|
</p></dd>
|
|
<dt><code class="code">\t</code></dt>
|
|
<dd><p>horizontal tab
|
|
</p></dd>
|
|
<dt><code class="code">\v</code></dt>
|
|
<dd><p>vertical tab
|
|
</p></dd>
|
|
<dt><code class="code">\\</code></dt>
|
|
<dd><p>backslash
|
|
</p></dd>
|
|
<dt><code class="code">\0<var class="var">nnn</var></code></dt>
|
|
<dd><p>The eight-bit character whose value is the octal value <var class="var">nnn</var>
|
|
(zero to three octal digits).
|
|
</p></dd>
|
|
<dt><code class="code">\x<var class="var">HH</var></code></dt>
|
|
<dd><p>The eight-bit character whose value is the hexadecimal value <var class="var">HH</var>
|
|
(one or two hex digits).
|
|
</p></dd>
|
|
<dt><code class="code">\u<var class="var">HHHH</var></code></dt>
|
|
<dd><p>The Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
|
|
<var class="var">HHHH</var> (one to four hex digits).
|
|
</p></dd>
|
|
<dt><code class="code">\U<var class="var">HHHHHHHH</var></code></dt>
|
|
<dd><p>The Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
|
|
<var class="var">HHHHHHHH</var> (one to eight hex digits).
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p><code class="code">echo</code> writes any unrecognized backslash-escaped characters unchanged.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-enable"></a><span><code class="code">enable</code><a class="copiable-link" href="#index-enable"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">enable [-a] [-dnps] [-f <var class="var">filename</var>] [<var class="var">name</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Enable and disable builtin shell commands.
|
|
Disabling a builtin allows an executable file which has the same name
|
|
as a shell builtin to be executed without specifying a full pathname,
|
|
even though the shell normally searches for builtins before files.
|
|
</p>
|
|
<p>If <samp class="option">-n</samp> is supplied, the <var class="var">name</var>s are disabled.
|
|
Otherwise <var class="var">name</var>s are enabled.
|
|
For example, to use the <code class="code">test</code> binary
|
|
found using <code class="env">$PATH</code> instead of the shell builtin version, type
|
|
‘<samp class="samp">enable -n test</samp>’.
|
|
</p>
|
|
<p>If the <samp class="option">-p</samp> option is supplied, or no <var class="var">name</var> arguments are
|
|
supplied, print a list of shell builtins.
|
|
With no other arguments, the list consists of all enabled shell builtins.
|
|
The <samp class="option">-n</samp> option means to print only disabled builtins.
|
|
The <samp class="option">-a</samp> option means to list
|
|
each builtin with an indication of whether or not it is enabled.
|
|
The <samp class="option">-s</samp> option means to
|
|
restrict <code class="code">enable</code> to the
|
|
<small class="sc">POSIX</small>
|
|
special builtins.
|
|
</p>
|
|
<p>The <samp class="option">-f</samp> option means to load the new builtin command <var class="var">name</var>
|
|
from shared object <var class="var">filename</var>, on systems that support dynamic loading.
|
|
If <var class="var">filename</var> does not contain a slash.
|
|
Bash will use the value of the <code class="env">BASH_LOADABLES_PATH</code> variable as a
|
|
colon-separated list of directories in which to search for <var class="var">filename</var>.
|
|
The default for <code class="env">BASH_LOADABLES_PATH</code> is system-dependent,
|
|
and may include "." to force a search of the current directory.
|
|
The <samp class="option">-d</samp> option will delete a builtin loaded with <samp class="option">-f</samp>.
|
|
If <samp class="option">-s</samp> is used with <samp class="option">-f</samp>, the new builtin becomes a
|
|
<small class="sc">POSIX</small>
|
|
special builtin (see <a class="pxref" href="#Special-Builtins">Special Builtins</a>).
|
|
</p>
|
|
<p>If no options are supplied and a <var class="var">name</var> is not a shell builtin,
|
|
<code class="code">enable</code> will attempt to load <var class="var">name</var> from a shared object named
|
|
<var class="var">name</var>, as if the command were
|
|
‘<samp class="samp">enable -f <var class="var">name</var> <var class="var">name</var></samp>’.
|
|
</p>
|
|
<p>The return status is zero unless a <var class="var">name</var> is not a shell builtin
|
|
or there is an error loading a new builtin from a shared object.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-help"></a><span><code class="code">help</code><a class="copiable-link" href="#index-help"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">help [-dms] [<var class="var">pattern</var>]
|
|
</pre></div>
|
|
|
|
<p>Display helpful information about builtin commands.
|
|
If <var class="var">pattern</var> is specified, <code class="code">help</code> gives detailed help
|
|
on all commands matching <var class="var">pattern</var>
|
|
as described below;
|
|
otherwise it displays a list of
|
|
all builtins and shell compound commands.
|
|
</p>
|
|
<p>Options, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-d</code></dt>
|
|
<dd><p>Display a short description of each <var class="var">pattern</var>
|
|
</p></dd>
|
|
<dt><code class="code">-m</code></dt>
|
|
<dd><p>Display the description of each <var class="var">pattern</var> in a manpage-like format
|
|
</p></dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>Display only a short usage synopsis for each <var class="var">pattern</var>
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If <var class="var">pattern</var> contains pattern matching characters
|
|
(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>)
|
|
it’s treated as a shell pattern and
|
|
<code class="code">help</code> prints the description of each
|
|
help topic matching <var class="var">pattern</var>.
|
|
</p>
|
|
<p>If not, and <var class="var">pattern</var> exactly matches the name of a help topic,
|
|
<code class="code">help</code> prints the description
|
|
associated with that topic.
|
|
Otherwise, <code class="code">help</code> performs prefix matching and
|
|
prints the descriptions of all matching help topics.
|
|
</p>
|
|
<p>The return status is zero unless no command matches <var class="var">pattern</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-let"></a><span><code class="code">let</code><a class="copiable-link" href="#index-let"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">let <var class="var">expression</var> [<var class="var">expression</var> ...]
|
|
</pre></div>
|
|
|
|
<p>The <code class="code">let</code> builtin allows arithmetic to be performed on shell variables.
|
|
Each <var class="var">expression</var> is evaluated as an arithmetic expression
|
|
according to the rules given below in <a class="ref" href="#Shell-Arithmetic">Shell Arithmetic</a>.
|
|
If the last <var class="var">expression</var> evaluates to 0,
|
|
<code class="code">let</code> returns 1;
|
|
otherwise <code class="code">let</code> returns 0.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-local"></a><span><code class="code">local</code><a class="copiable-link" href="#index-local"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">local [<var class="var">option</var>] <var class="var">name</var>[=<var class="var">value</var>] ...
|
|
</pre></div>
|
|
|
|
<p>For each argument, create a local variable named <var class="var">name</var>,
|
|
and assign it <var class="var">value</var>.
|
|
The <var class="var">option</var> can be any of the options accepted by <code class="code">declare</code>.
|
|
<code class="code">local</code> can only be used within a function; it makes the variable
|
|
<var class="var">name</var> have a visible scope restricted to that function and its
|
|
children.
|
|
It is an error to use <code class="code">local</code> when not within a function.
|
|
</p>
|
|
<p>If <var class="var">name</var> is ‘<samp class="samp">-</samp>’, it makes the set of shell options
|
|
local to the function in which <code class="code">local</code> is invoked:
|
|
any shell options changed using the <code class="code">set</code> builtin inside
|
|
the function after the call to <code class="code">local</code> are restored to their
|
|
original values when the function returns.
|
|
The restore is performed as if a series of <code class="code">set</code> commands were
|
|
executed to restore the values that were in place before the function.
|
|
</p>
|
|
<p>With no operands, <code class="code">local</code>
|
|
writes a list of local variables to the standard output.
|
|
</p>
|
|
<p>The return status is zero unless <code class="code">local</code> is used outside
|
|
a function, an invalid <var class="var">name</var> is supplied, or <var class="var">name</var> is a
|
|
readonly variable.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-logout"></a><span><code class="code">logout</code><a class="copiable-link" href="#index-logout"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">logout [<var class="var">n</var>]
|
|
</pre></div>
|
|
|
|
<p>Exit a login shell, returning a status of <var class="var">n</var> to the shell’s
|
|
parent.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-mapfile"></a><span><code class="code">mapfile</code><a class="copiable-link" href="#index-mapfile"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">mapfile [-d <var class="var">delim</var>] [-n <var class="var">count</var>] [-O <var class="var">origin</var>] [-s <var class="var">count</var>]
|
|
[-t] [-u <var class="var">fd</var>] [-C <var class="var">callback</var>] [-c <var class="var">quantum</var>] [<var class="var">array</var>]
|
|
</pre></div>
|
|
|
|
<p>Read lines from the standard input,
|
|
or from file descriptor <var class="var">fd</var> if the <samp class="option">-u</samp> option is supplied,
|
|
into the indexed array variable <var class="var">array</var>.
|
|
The variable <code class="code">MAPFILE</code> is the default <var class="var">array</var>.
|
|
Options, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-d</code></dt>
|
|
<dd><p>Use the first character of <var class="var">delim</var> to terminate each input line,
|
|
rather than newline.
|
|
If <var class="var">delim</var> is the empty string, <code class="code">mapfile</code> will terminate a line
|
|
when it reads a NUL character.
|
|
</p></dd>
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>Copy at most <var class="var">count</var> lines.
|
|
If <var class="var">count</var> is 0, copy all lines.
|
|
</p></dd>
|
|
<dt><code class="code">-O</code></dt>
|
|
<dd><p>Begin assigning to <var class="var">array</var> at index <var class="var">origin</var>.
|
|
The default index is 0.
|
|
</p></dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>Discard the first <var class="var">count</var> lines read.
|
|
</p></dd>
|
|
<dt><code class="code">-t</code></dt>
|
|
<dd><p>Remove a trailing <var class="var">delim</var> (default newline) from each line read.
|
|
</p></dd>
|
|
<dt><code class="code">-u</code></dt>
|
|
<dd><p>Read lines from file descriptor <var class="var">fd</var> instead of the standard input.
|
|
</p></dd>
|
|
<dt><code class="code">-C</code></dt>
|
|
<dd><p>Evaluate <var class="var">callback</var> each time <var class="var">quantum</var> lines are read.
|
|
The <samp class="option">-c</samp> option specifies <var class="var">quantum</var>.
|
|
</p></dd>
|
|
<dt><code class="code">-c</code></dt>
|
|
<dd><p>Specify the number of lines read between each call to <var class="var">callback</var>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If <samp class="option">-C</samp> is specified without <samp class="option">-c</samp>,
|
|
the default quantum is 5000.
|
|
When <var class="var">callback</var> is evaluated, it is supplied the index of the next
|
|
array element to be assigned and the line to be assigned to that element
|
|
as additional arguments.
|
|
<var class="var">callback</var> is evaluated after the line is read but before the
|
|
array element is assigned.
|
|
</p>
|
|
<p>If not supplied with an explicit origin, <code class="code">mapfile</code> will clear <var class="var">array</var>
|
|
before assigning to it.
|
|
</p>
|
|
<p><code class="code">mapfile</code> returns zero unless an invalid option or option
|
|
argument is supplied, <var class="var">array</var> is invalid or unassignable, or if
|
|
<var class="var">array</var> is not an indexed array.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-printf"></a><span><code class="code">printf</code><a class="copiable-link" href="#index-printf"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">printf [-v <var class="var">var</var>] <var class="var">format</var> [<var class="var">arguments</var>]
|
|
</pre></div>
|
|
|
|
<p>Write the formatted <var class="var">arguments</var> to the standard output under the
|
|
control of the <var class="var">format</var>.
|
|
The <samp class="option">-v</samp> option assigns the output to the variable
|
|
<var class="var">var</var> rather than printing it to the standard output.
|
|
</p>
|
|
<p>The <var class="var">format</var> is a character string which contains three types of objects:
|
|
plain characters, which are simply copied to standard output, character
|
|
escape sequences, which are converted and copied to the standard output, and
|
|
format specifications, each of which causes printing of the next successive
|
|
<var class="var">argument</var>.
|
|
In addition to the standard <code class="code">printf(3)</code> format characters
|
|
<code class="code">cCsSndiouxXeEfFgGaA</code>,
|
|
<code class="code">printf</code> interprets the following additional format specifiers:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">%b</code></dt>
|
|
<dd><p>Causes <code class="code">printf</code> to expand backslash escape sequences in the
|
|
corresponding <var class="var">argument</var> in the same way as <code class="code">echo -e</code>
|
|
(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
</p></dd>
|
|
<dt><code class="code">%q</code></dt>
|
|
<dd><p>Causes <code class="code">printf</code> to output the
|
|
corresponding <var class="var">argument</var> in a format that can be reused as shell input.
|
|
<code class="code">%q</code> and <code class="code">%Q</code>P use the ANSI-C quoting style (see <a class="pxref" href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>)
|
|
if any characters
|
|
in the argument string require it, and backslash quoting otherwise.
|
|
If the format string uses the <code class="code">printf</code> <em class="emph">alternate form</em>, these two
|
|
formats quote the argument string using single quotes.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">%Q</code></dt>
|
|
<dd><p>like <code class="code">%q</code>, but applies any supplied precision to the <var class="var">argument</var>
|
|
before quoting it.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">%(<var class="var">datefmt</var>)T</code></dt>
|
|
<dd><p>Causes <code class="code">printf</code> to output the date-time string resulting from using
|
|
<var class="var">datefmt</var> as a format string for <code class="code">strftime</code>(3).
|
|
The corresponding <var class="var">argument</var> is an integer representing the number of
|
|
seconds since the epoch.
|
|
This format specifier recognizes Two special argument values:
|
|
-1 represents the current time,
|
|
and -2 represents the time the shell was invoked.
|
|
If no argument is specified, conversion behaves as if -1 had been supplied.
|
|
This is an exception to the usual <code class="code">printf</code> behavior.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The %b, %q, and %T format specifiers all use the field width and precision
|
|
arguments from the format specification and write that many bytes from
|
|
(or use that wide a field for) the expanded argument, which usually
|
|
contains more characters than the original.
|
|
</p>
|
|
<p>The %n format specifier accepts a corresponding argument that is treated
|
|
as a shell variable name.
|
|
</p>
|
|
<p>The %s and %c format specifiers accept an l (long) modifier, which forces
|
|
them to convert the argument string to a wide-character string and apply
|
|
any supplied field width and precision in terms of characters, not bytes.
|
|
The %S and %C format specifiers are equivalent to %ls and %lc, respectively.
|
|
</p>
|
|
|
|
<p>Arguments to non-string format specifiers are treated as C language constants,
|
|
except that a leading plus or minus sign is allowed, and if the leading
|
|
character is a single or double quote, the value is the numeric value of
|
|
the following character, using the current locale.
|
|
</p>
|
|
<p>The <var class="var">format</var> is reused as necessary to consume all of the <var class="var">arguments</var>.
|
|
If the <var class="var">format</var> requires more <var class="var">arguments</var> than are supplied, the
|
|
extra format specifications behave as if a zero value or null string, as
|
|
appropriate, had been supplied.
|
|
The return value is zero on success,
|
|
non-zero if an invalid option is supplied or a write or assignment error
|
|
occurs.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-read"></a><span><code class="code">read</code><a class="copiable-link" href="#index-read"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">read [-Eers] [-a <var class="var">aname</var>] [-d <var class="var">delim</var>] [-i <var class="var">text</var>] [-n <var class="var">nchars</var>]
|
|
[-N <var class="var">nchars</var>] [-p <var class="var">prompt</var>] [-t <var class="var">timeout</var>] [-u <var class="var">fd</var>] [<var class="var">name</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Read one line from the standard input, or from the file descriptor
|
|
<var class="var">fd</var> supplied as an argument to the <samp class="option">-u</samp> option,
|
|
split it into words as described above in <a class="ref" href="#Word-Splitting">Word Splitting</a>,
|
|
and assign the first word to the first <var class="var">name</var>,
|
|
the second word to the second <var class="var">name</var>, and so on.
|
|
If there are more words than names,
|
|
the remaining words and their intervening delimiters are assigned
|
|
to the last <var class="var">name</var>.
|
|
If there are fewer words read from the input stream than names,
|
|
the remaining names are assigned empty values.
|
|
The characters in the value of the <code class="env">IFS</code> variable
|
|
are used to split the line into words using the same rules the shell
|
|
uses for expansion (described above in <a class="ref" href="#Word-Splitting">Word Splitting</a>).
|
|
The backslash character ‘<samp class="samp">\</samp>’ removes any special
|
|
meaning for the next character read and is used for line continuation.
|
|
</p>
|
|
<p>Options, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-a <var class="var">aname</var></code></dt>
|
|
<dd><p>The words are assigned to sequential indices of the array variable
|
|
<var class="var">aname</var>,
|
|
starting at 0.
|
|
All elements are removed from <var class="var">aname</var> before the assignment.
|
|
Other <var class="var">name</var> arguments are ignored.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-d <var class="var">delim</var></code></dt>
|
|
<dd><p>The first character of <var class="var">delim</var> terminates the input line,
|
|
rather than newline.
|
|
If <var class="var">delim</var> is the empty string, <code class="code">read</code> will terminate a line
|
|
when it reads a NUL character.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-e</code></dt>
|
|
<dd><p>If the standard input is coming from a terminal,
|
|
<code class="code">read</code> uses
|
|
Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>)
|
|
to obtain the line.
|
|
Readline uses the current (or default, if line editing was not previously
|
|
active) editing settings, but uses Readline’s default filename completion.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-E</code></dt>
|
|
<dd><p>If the standard input is coming from a terminal,
|
|
<code class="code">read</code> uses
|
|
Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) to obtain the line.
|
|
Readline uses the current (or default, if line editing was not previously
|
|
active) editing settings, but uses Bash’s default completion, including
|
|
programmable completion.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-i <var class="var">text</var></code></dt>
|
|
<dd><p>If Readline is being used to read the line, <code class="code">read</code> places <var class="var">text</var> into
|
|
the editing buffer before editing begins.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-n <var class="var">nchars</var></code></dt>
|
|
<dd><p><code class="code">read</code> returns after reading <var class="var">nchars</var> characters rather than
|
|
waiting for a complete line of input,
|
|
unless it encounters EOF or <code class="code">read</code> times out,
|
|
but honors a delimiter if it reads fewer
|
|
than <var class="var">nchars</var> characters before the delimiter.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-N <var class="var">nchars</var></code></dt>
|
|
<dd><p><code class="code">read</code> returns after reading exactly <var class="var">nchars</var> characters rather
|
|
than waiting for a complete line of input,
|
|
unless it encounters EOF or <code class="code">read</code> times out.
|
|
Delimiter characters in the input are
|
|
not treated specially and do not cause <code class="code">read</code> to return until
|
|
it has read <var class="var">nchars</var> characters.
|
|
The result is not split on the characters in <code class="code">IFS</code>; the intent is
|
|
that the variable is assigned exactly the characters read
|
|
(with the exception of backslash; see the <samp class="option">-r</samp> option below).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-p <var class="var">prompt</var></code></dt>
|
|
<dd><p>Display <var class="var">prompt</var>, without a trailing newline, before attempting
|
|
to read any input, but only if input is coming from a terminal.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r</code></dt>
|
|
<dd><p>If this option is given, backslash does not act as an escape character.
|
|
The backslash is considered to be part of the line.
|
|
In particular, a backslash-newline pair may not then be used as a line
|
|
continuation.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>Silent mode.
|
|
If input is coming from a terminal, characters are not echoed.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-t <var class="var">timeout</var></code></dt>
|
|
<dd><p>Cause <code class="code">read</code> to time out and return failure if it does not read
|
|
a complete line of input (or a specified number of characters)
|
|
within <var class="var">timeout</var> seconds.
|
|
<var class="var">timeout</var> may be a decimal number with a fractional portion following
|
|
the decimal point.
|
|
This option is only effective if <code class="code">read</code> is reading input from a
|
|
terminal, pipe, or other special file; it has no effect when reading
|
|
from regular files.
|
|
If <code class="code">read</code> times out, it saves any partial input read into
|
|
the specified variable <var class="var">name</var>, and returns a status greater than 128.
|
|
If <var class="var">timeout</var> is 0, <code class="code">read</code> returns immediately, without trying to
|
|
read any data.
|
|
In this case, the exit status is 0 if input is available on the specified
|
|
file descriptor, or the read will return EOF, non-zero otherwise.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-u <var class="var">fd</var></code></dt>
|
|
<dd><p>Read input from file descriptor <var class="var">fd</var> instead of the standard input.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Other than the case where <var class="var">delim</var> is the empty string, <code class="code">read</code>
|
|
ignores any NUL characters in the input.
|
|
</p>
|
|
<p>If no <var class="var">name</var>s are supplied, <code class="code">read</code> assigns the line read,
|
|
without the ending delimiter but otherwise unmodified,
|
|
to the variable <code class="env">REPLY</code>.
|
|
</p>
|
|
<p>The exit status is zero, unless end-of-file is encountered, <code class="code">read</code>
|
|
times out (in which case the status is greater than 128),
|
|
a variable assignment error (such as assigning to a readonly variable) occurs,
|
|
or an invalid file descriptor is supplied as the argument to <samp class="option">-u</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-readarray"></a><span><code class="code">readarray</code><a class="copiable-link" href="#index-readarray"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">readarray [-d <var class="var">delim</var>] [-n <var class="var">count</var>] [-O <var class="var">origin</var>] [-s <var class="var">count</var>]
|
|
[-t] [-u <var class="var">fd</var>] [-C <var class="var">callback</var>] [-c <var class="var">quantum</var>] [<var class="var">array</var>]
|
|
</pre></div>
|
|
|
|
<p>Read lines from the standard input into the indexed array variable <var class="var">array</var>,
|
|
or from file descriptor <var class="var">fd</var>
|
|
if the <samp class="option">-u</samp> option is supplied.
|
|
</p>
|
|
<p>A synonym for <code class="code">mapfile</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-source"></a><span><code class="code">source</code><a class="copiable-link" href="#index-source"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">source [-p <var class="var">path</var>] <var class="var">filename</var> [<var class="var">arguments</var>]
|
|
</pre></div>
|
|
|
|
<p>A synonym for <code class="code">.</code> (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-type"></a><span><code class="code">type</code><a class="copiable-link" href="#index-type"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">type [-afptP] [<var class="var">name</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Indicate how each <var class="var">name</var> would be interpreted if used as a command
|
|
name.
|
|
</p>
|
|
<p>If the <samp class="option">-t</samp> option is used, <code class="code">type</code> prints a single word
|
|
which is one of ‘<samp class="samp">alias</samp>’, ‘<samp class="samp">keyword</samp>’, ‘<samp class="samp">function</samp>’,
|
|
‘<samp class="samp">builtin</samp>’, or ‘<samp class="samp">file</samp>’,
|
|
if <var class="var">name</var> is an alias, shell reserved word, shell function,
|
|
shell builtin, or executable file, respectively.
|
|
If the <var class="var">name</var> is not found, <code class="code">type</code> prints nothing and
|
|
returns a failure status.
|
|
</p>
|
|
<p>If the <samp class="option">-p</samp> option is used, <code class="code">type</code> either returns the name
|
|
of the executable file that would be found by searching <code class="code">$PATH</code>
|
|
for <code class="code">name</code>,
|
|
or nothing if <samp class="option">-t</samp> would not return ‘<samp class="samp">file</samp>’.
|
|
</p>
|
|
<p>The <samp class="option">-P</samp> option forces a path search for each <var class="var">name</var>, even if
|
|
<samp class="option">-t</samp> would not return ‘<samp class="samp">file</samp>’.
|
|
</p>
|
|
<p>If a <var class="var">name</var> is present in the table of hashed commands,
|
|
options <samp class="option">-p</samp> and <samp class="option">-P</samp> print the hashed value, which is not
|
|
necessarily the file that appears first in <code class="code">$PATH</code>.
|
|
</p>
|
|
<p>If the <samp class="option">-a</samp> option is used, <code class="code">type</code> returns all of the places
|
|
that contain a command named <var class="var">name</var>.
|
|
This includes aliases, reserved words, functions, and builtins,
|
|
but the path search options (<samp class="option">-p</samp> and <samp class="option">-P</samp>) can be supplied
|
|
to restrict the output to executable files.
|
|
If <samp class="option">-a</samp> is supplied with <samp class="option">-p</samp>, <code class="code">type</code> does not look
|
|
in the table of hashed commands, and only performs a <code class="code">PATH</code>
|
|
search for <var class="var">name</var>.
|
|
</p>
|
|
<p>If the <samp class="option">-f</samp> option is used, <code class="code">type</code> does not attempt to find
|
|
shell functions, as with the <code class="code">command</code> builtin.
|
|
</p>
|
|
<p>The return status is zero if all of the <var class="var">name</var>s are found, non-zero
|
|
if any are not found.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-typeset"></a><span><code class="code">typeset</code><a class="copiable-link" href="#index-typeset"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">typeset [-afFgrxilnrtux] [-p] [<var class="var">name</var>[=<var class="var">value</var>] ...]
|
|
</pre></div>
|
|
|
|
<p>The <code class="code">typeset</code> command is supplied for compatibility with the Korn
|
|
shell.
|
|
It is a synonym for the <code class="code">declare</code> builtin command.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-ulimit"></a><span><code class="code">ulimit</code><a class="copiable-link" href="#index-ulimit"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">ulimit [-HS] -a
|
|
ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [<var class="var">limit</var>]
|
|
</pre></div>
|
|
|
|
<p><code class="code">ulimit</code> provides control over the resources available to the
|
|
shell and to processes it starts, on systems that allow such control.
|
|
If an option is given, it is interpreted as follows:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-S</code></dt>
|
|
<dd><p>Change and report the soft limit associated with a resource.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-H</code></dt>
|
|
<dd><p>Change and report the hard limit associated with a resource.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-a</code></dt>
|
|
<dd><p>Report all current limits; no limits are set.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-b</code></dt>
|
|
<dd><p>The maximum socket buffer size.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-c</code></dt>
|
|
<dd><p>The maximum size of core files created.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-d</code></dt>
|
|
<dd><p>The maximum size of a process’s data segment.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-e</code></dt>
|
|
<dd><p>The maximum scheduling priority ("nice").
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-f</code></dt>
|
|
<dd><p>The maximum size of files written by the shell and its children.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-i</code></dt>
|
|
<dd><p>The maximum number of pending signals.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-k</code></dt>
|
|
<dd><p>The maximum number of kqueues that may be allocated.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-l</code></dt>
|
|
<dd><p>The maximum size that may be locked into memory.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-m</code></dt>
|
|
<dd><p>The maximum resident set size (many systems do not honor this limit).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>The maximum number of open file descriptors (most systems do not
|
|
allow this value to be set).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-p</code></dt>
|
|
<dd><p>The pipe buffer size.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-q</code></dt>
|
|
<dd><p>The maximum number of bytes in
|
|
<small class="sc">POSIX</small>
|
|
message queues.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r</code></dt>
|
|
<dd><p>The maximum real-time scheduling priority.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>The maximum stack size.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-t</code></dt>
|
|
<dd><p>The maximum amount of cpu time in seconds.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-u</code></dt>
|
|
<dd><p>The maximum number of processes available to a single user.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-v</code></dt>
|
|
<dd><p>The maximum amount of virtual memory available to the shell, and, on
|
|
some systems, to its children.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-x</code></dt>
|
|
<dd><p>The maximum number of file locks.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-P</code></dt>
|
|
<dd><p>The maximum number of pseudoterminals.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-R</code></dt>
|
|
<dd><p>The maximum time a real-time process can run before blocking, in microseconds.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-T</code></dt>
|
|
<dd><p>The maximum number of threads.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If <var class="var">limit</var> is supplied, and the <samp class="option">-a</samp> option is not used,
|
|
<var class="var">limit</var> is the new value of the specified resource.
|
|
The special <var class="var">limit</var> values <code class="code">hard</code>, <code class="code">soft</code>, and
|
|
<code class="code">unlimited</code> stand for the current hard limit, the current soft limit,
|
|
and no limit, respectively.
|
|
A hard limit cannot be increased by a non-root user once it is set;
|
|
a soft limit may be increased up to the value of the hard limit.
|
|
Otherwise, <code class="code">ulimit</code> prints the current value of the soft limit
|
|
for the specified resource, unless the <samp class="option">-H</samp> option is supplied.
|
|
When more than one
|
|
resource is specified, the limit name and unit, if appropriate,
|
|
are printed before the value.
|
|
When setting new limits, if neither <samp class="option">-H</samp> nor <samp class="option">-S</samp> is supplied,
|
|
<code class="code">ulimit</code> sets both the hard and soft limits.
|
|
If no option is supplied, then <samp class="option">-f</samp> is assumed.
|
|
</p>
|
|
<p>Values are in 1024-byte increments, except for
|
|
<samp class="option">-t</samp>, which is in seconds;
|
|
<samp class="option">-R</samp>, which is in microseconds;
|
|
<samp class="option">-p</samp>, which is in units of 512-byte blocks;
|
|
<samp class="option">-P</samp>,
|
|
<samp class="option">-T</samp>,
|
|
<samp class="option">-b</samp>,
|
|
<samp class="option">-k</samp>,
|
|
<samp class="option">-n</samp> and <samp class="option">-u</samp>, which are unscaled values;
|
|
and, when in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>),
|
|
<samp class="option">-c</samp> and <samp class="option">-f</samp>, which are in 512-byte increments.
|
|
</p>
|
|
<p>The return status is zero unless an invalid option or argument is supplied,
|
|
or an error occurs while setting a new limit.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-unalias"></a><span><code class="code">unalias</code><a class="copiable-link" href="#index-unalias"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">unalias [-a] [<var class="var">name</var> ... ]
|
|
</pre></div>
|
|
|
|
<p>Remove each <var class="var">name</var> from the list of aliases.
|
|
If <samp class="option">-a</samp> is supplied, remove all aliases.
|
|
The return value is true unless a supplied <var class="var">name</var> is not a defined alias.
|
|
Aliases are described in <a class="ref" href="#Aliases">Aliases</a>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Modifying-Shell-Behavior">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Special-Builtins" accesskey="n" rel="next">Special Builtins</a>, Previous: <a href="#Bash-Builtins" accesskey="p" rel="prev">Bash Builtin Commands</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Modifying-Shell-Behavior-1"><span>4.3 Modifying Shell Behavior<a class="copiable-link" href="#Modifying-Shell-Behavior-1"> ¶</a></span></h3>
|
|
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#The-Set-Builtin" accesskey="1">The Set Builtin</a></li>
|
|
<li><a href="#The-Shopt-Builtin" accesskey="2">The Shopt Builtin</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="The-Set-Builtin">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#The-Shopt-Builtin" accesskey="n" rel="next">The Shopt Builtin</a>, Up: <a href="#Modifying-Shell-Behavior" accesskey="u" rel="up">Modifying Shell Behavior</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="The-Set-Builtin-1"><span>4.3.1 The Set Builtin<a class="copiable-link" href="#The-Set-Builtin-1"> ¶</a></span></h4>
|
|
|
|
<p>This builtin is so complicated that it deserves its own section. <code class="code">set</code>
|
|
allows you to change the values of shell options and set the positional
|
|
parameters, or to display the names and values of shell variables.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a id="index-set"></a><span><code class="code">set</code><a class="copiable-link" href="#index-set"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">set [-abefhkmnptuvxBCEHPT] [-o <var class="var">option-name</var>] [--] [-] [<var class="var">argument</var> ...]
|
|
set [+abefhkmnptuvxBCEHPT] [+o <var class="var">option-name</var>] [--] [-] [<var class="var">argument</var> ...]
|
|
set -o
|
|
set +o
|
|
</pre></div>
|
|
|
|
<p>If no options or arguments are supplied, <code class="code">set</code> displays the names
|
|
and values of all shell variables and functions, sorted according to the
|
|
current locale, in a format that may be reused as input
|
|
for setting or resetting the currently-set variables.
|
|
Read-only variables cannot be reset.
|
|
In <small class="sc">POSIX</small> mode, only shell variables are listed.
|
|
</p>
|
|
<p>When options are supplied, they set or unset shell attributes.
|
|
Any arguments remaining after option processing replace the
|
|
positional parameters.
|
|
</p>
|
|
<p>Options, if specified, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-a</code></dt>
|
|
<dd><p>Each variable or function that is created or modified is given the
|
|
export attribute and marked for export to the environment of
|
|
subsequent commands.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-b</code></dt>
|
|
<dd><p>Cause the status of terminated background jobs to be reported
|
|
immediately, rather than before printing the next primary prompt
|
|
or, under some circumstances, when a foreground command exits.
|
|
This is effective only when job control is enabled.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-e</code></dt>
|
|
<dd><p>Exit immediately if
|
|
a pipeline (see <a class="pxref" href="#Pipelines">Pipelines</a>), which may consist of a single simple command
|
|
(see <a class="pxref" href="#Simple-Commands">Simple Commands</a>),
|
|
a list (see <a class="pxref" href="#Lists">Lists of Commands</a>),
|
|
or a compound command (see <a class="pxref" href="#Compound-Commands">Compound Commands</a>)
|
|
returns a non-zero status.
|
|
The shell does not exit if the command that fails is part of the
|
|
command list immediately following a
|
|
<code class="code">while</code> or <code class="code">until</code> reserved word,
|
|
part of the test in an <code class="code">if</code> statement,
|
|
part of any command executed in a <code class="code">&&</code> or <code class="code">||</code> list except
|
|
the command following the final <code class="code">&&</code> or <code class="code">||</code>,
|
|
any command in a pipeline but the last
|
|
(subject to the state of the <code class="code">pipefail</code> shell option),
|
|
or if the command’s return status is being inverted with <code class="code">!</code>.
|
|
If a compound command other than a subshell
|
|
returns a non-zero status because a command failed
|
|
while <samp class="option">-e</samp> was being ignored, the shell does not exit.
|
|
A trap on <code class="code">ERR</code>, if set, is executed before the shell exits.
|
|
</p>
|
|
<p>This option applies to the shell environment and each subshell environment
|
|
separately (see <a class="pxref" href="#Command-Execution-Environment">Command Execution Environment</a>), and may cause
|
|
subshells to exit before executing all the commands in the subshell.
|
|
</p>
|
|
<p>If a compound command or shell function executes in a context where
|
|
<samp class="option">-e</samp> is being ignored,
|
|
none of the commands executed within the compound command or function body
|
|
will be affected by the <samp class="option">-e</samp> setting, even if <samp class="option">-e</samp> is set
|
|
and a command returns a failure status.
|
|
If a compound command or shell function sets <samp class="option">-e</samp> while executing in
|
|
a context where <samp class="option">-e</samp> is ignored, that setting will not have any
|
|
effect until the compound command or the command containing the function
|
|
call completes.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-f</code></dt>
|
|
<dd><p>Disable filename expansion (globbing).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-h</code></dt>
|
|
<dd><p>Locate and remember (hash) commands as they are looked up for execution.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-k</code></dt>
|
|
<dd><p>All arguments in the form of assignment statements are placed
|
|
in the environment for a command, not just those that precede
|
|
the command name.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-m</code></dt>
|
|
<dd><p>Job control is enabled (see <a class="pxref" href="#Job-Control">Job Control</a>).
|
|
All processes run in a separate process group.
|
|
When a background job completes, the shell prints a line
|
|
containing its exit status.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>Read commands but do not execute them.
|
|
This may be used to check a script for syntax errors.
|
|
This option is ignored by interactive shells.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-o <var class="var">option-name</var></code></dt>
|
|
<dd>
|
|
<p>Set the option corresponding to <var class="var">option-name</var>.
|
|
If <samp class="option">-o</samp> is supplied with no <var class="var">option-name</var>,
|
|
<code class="code">set</code> prints the current shell options settings.
|
|
If <samp class="option">+o</samp> is supplied with no <var class="var">option-name</var>,
|
|
<code class="code">set</code> prints a series of
|
|
<code class="code">set</code>
|
|
commands to recreate the current option settings
|
|
on the standard output.
|
|
Valid option names are:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">allexport</code></dt>
|
|
<dd><p>Same as <code class="code">-a</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">braceexpand</code></dt>
|
|
<dd><p>Same as <code class="code">-B</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">emacs</code></dt>
|
|
<dd><p>Use an <code class="code">emacs</code>-style line editing interface (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>).
|
|
This also affects the editing interface used for <code class="code">read -e</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">errexit</code></dt>
|
|
<dd><p>Same as <code class="code">-e</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">errtrace</code></dt>
|
|
<dd><p>Same as <code class="code">-E</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">functrace</code></dt>
|
|
<dd><p>Same as <code class="code">-T</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">hashall</code></dt>
|
|
<dd><p>Same as <code class="code">-h</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">histexpand</code></dt>
|
|
<dd><p>Same as <code class="code">-H</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">history</code></dt>
|
|
<dd><p>Enable command history, as described in <a class="ref" href="#Bash-History-Facilities">Bash History Facilities</a>.
|
|
This option is on by default in interactive shells.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">ignoreeof</code></dt>
|
|
<dd><p>An interactive shell will not exit upon reading EOF.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">keyword</code></dt>
|
|
<dd><p>Same as <code class="code">-k</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">monitor</code></dt>
|
|
<dd><p>Same as <code class="code">-m</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">noclobber</code></dt>
|
|
<dd><p>Same as <code class="code">-C</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">noexec</code></dt>
|
|
<dd><p>Same as <code class="code">-n</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">noglob</code></dt>
|
|
<dd><p>Same as <code class="code">-f</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">nolog</code></dt>
|
|
<dd><p>Currently ignored.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">notify</code></dt>
|
|
<dd><p>Same as <code class="code">-b</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">nounset</code></dt>
|
|
<dd><p>Same as <code class="code">-u</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">onecmd</code></dt>
|
|
<dd><p>Same as <code class="code">-t</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">physical</code></dt>
|
|
<dd><p>Same as <code class="code">-P</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">pipefail</code></dt>
|
|
<dd><p>If set, the return value of a pipeline is the value of the last
|
|
(rightmost) command to exit with a non-zero status, or zero if all
|
|
commands in the pipeline exit successfully.
|
|
This option is disabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">posix</code></dt>
|
|
<dd><p>Enable <small class="sc">POSIX</small> mode;
|
|
change the behavior of Bash where the default operation differs
|
|
from the <small class="sc">POSIX</small> standard to match the standard
|
|
(see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>).
|
|
This is intended to make Bash behave as a strict superset of that
|
|
standard.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">privileged</code></dt>
|
|
<dd><p>Same as <code class="code">-p</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">verbose</code></dt>
|
|
<dd><p>Same as <code class="code">-v</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">vi</code></dt>
|
|
<dd><p>Use a <code class="code">vi</code>-style line editing interface.
|
|
This also affects the editing interface used for <code class="code">read -e</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">xtrace</code></dt>
|
|
<dd><p>Same as <code class="code">-x</code>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
</dd>
|
|
<dt><code class="code">-p</code></dt>
|
|
<dd><p>Turn on privileged mode.
|
|
In this mode, the <code class="env">$BASH_ENV</code> and <code class="env">$ENV</code> files are not
|
|
processed, shell functions are not inherited from the environment,
|
|
and the <code class="env">SHELLOPTS</code>, <code class="env">BASHOPTS</code>, <code class="env">CDPATH</code> and <code class="env">GLOBIGNORE</code>
|
|
variables, if they appear in the environment, are ignored.
|
|
If the shell is started with the effective user (group) id not equal to the
|
|
real user (group) id, and the <samp class="option">-p</samp> option is not supplied, these actions
|
|
are taken and the effective user id is set to the real user id.
|
|
If the <samp class="option">-p</samp> option is supplied at startup, the effective user id is
|
|
not reset.
|
|
Turning this option off causes the effective user
|
|
and group ids to be set to the real user and group ids.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r</code></dt>
|
|
<dd><p>Enable restricted shell mode (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>).
|
|
This option cannot be unset once it has been set.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-t</code></dt>
|
|
<dd><p>Exit after reading and executing one command.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-u</code></dt>
|
|
<dd><p>Treat unset variables and parameters other than the special parameters
|
|
‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
or array variables subscripted with ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
as an error when performing parameter expansion.
|
|
An error message will be written to the standard error, and a non-interactive
|
|
shell will exit.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-v</code></dt>
|
|
<dd><p>Print shell input lines to standard error as they are read.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-x</code></dt>
|
|
<dd><p>Print a trace of simple commands, <code class="code">for</code> commands, <code class="code">case</code>
|
|
commands, <code class="code">select</code> commands, and arithmetic <code class="code">for</code> commands
|
|
and their arguments or associated word lists to the standard error
|
|
after they are expanded and before they are executed.
|
|
The shell prints the expanded value of the <code class="env">PS4</code> variable before
|
|
the command and its expanded arguments.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-B</code></dt>
|
|
<dd><p>The shell will perform brace expansion (see <a class="pxref" href="#Brace-Expansion">Brace Expansion</a>).
|
|
This option is on by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-C</code></dt>
|
|
<dd><p>Prevent output redirection using ‘<samp class="samp">></samp>’, ‘<samp class="samp">>&</samp>’, and ‘<samp class="samp"><></samp>’
|
|
from overwriting existing files.
|
|
Using the redirection operator ‘<samp class="samp">>|</samp>’ instead of ‘<samp class="samp">></samp>’
|
|
will override this and force the creation of an output file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-E</code></dt>
|
|
<dd><p>If set, any trap on <code class="code">ERR</code> is inherited by shell functions, command
|
|
substitutions, and commands executed in a subshell environment.
|
|
The <code class="code">ERR</code> trap is normally not inherited in such cases.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-H</code></dt>
|
|
<dd><p>Enable ‘<samp class="samp">!</samp>’ style history substitution (see <a class="pxref" href="#History-Interaction">History Expansion</a>).
|
|
This option is on by default for interactive shells.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-P</code></dt>
|
|
<dd><p>If set, Bash does not resolve symbolic links when executing commands
|
|
such as <code class="code">cd</code> which change the current directory.
|
|
It uses the physical directory structure instead.
|
|
By default, Bash follows
|
|
the logical chain of directories when performing commands
|
|
which change the current directory.
|
|
</p>
|
|
<p>For example, if <samp class="file">/usr/sys</samp> is a symbolic link to <samp class="file">/usr/local/sys</samp>
|
|
then:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">$ cd /usr/sys; echo $PWD
|
|
/usr/sys
|
|
$ cd ..; pwd
|
|
/usr
|
|
</pre></div>
|
|
|
|
<p>If <code class="code">set -P</code> is on, then:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">$ cd /usr/sys; echo $PWD
|
|
/usr/local/sys
|
|
$ cd ..; pwd
|
|
/usr/local
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">-T</code></dt>
|
|
<dd><p>If set, any traps on <code class="code">DEBUG</code> and <code class="code">RETURN</code> are inherited by
|
|
shell functions, command substitutions, and commands executed
|
|
in a subshell environment.
|
|
The <code class="code">DEBUG</code> and <code class="code">RETURN</code> traps are normally not inherited
|
|
in such cases.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--</code></dt>
|
|
<dd><p>If no arguments follow this option, unset the positional parameters.
|
|
Otherwise, the positional parameters are set to the
|
|
<var class="var">arguments</var>, even if some of them begin with a ‘<samp class="samp">-</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-</code></dt>
|
|
<dd><p>Signal the end of options, and assign all remaining <var class="var">arguments</var>
|
|
to the positional parameters.
|
|
The <samp class="option">-x</samp> and <samp class="option">-v</samp> options are turned off.
|
|
If there are no arguments, the positional parameters remain unchanged.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Using ‘<samp class="samp">+</samp>’ rather than ‘<samp class="samp">-</samp>’ causes these options to be
|
|
turned off.
|
|
The options can also be used upon invocation of the shell.
|
|
The current set of options may be found in <code class="code">$-</code>.
|
|
</p>
|
|
<p>The remaining N <var class="var">arguments</var> are positional parameters and are
|
|
assigned, in order, to <code class="code">$1</code>, <code class="code">$2</code>, … <code class="code">$N</code>.
|
|
The special parameter <code class="code">#</code> is set to N.
|
|
</p>
|
|
<p>The return status is always zero unless an invalid option is supplied.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="The-Shopt-Builtin">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#The-Set-Builtin" accesskey="p" rel="prev">The Set Builtin</a>, Up: <a href="#Modifying-Shell-Behavior" accesskey="u" rel="up">Modifying Shell Behavior</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="The-Shopt-Builtin-1"><span>4.3.2 The Shopt Builtin<a class="copiable-link" href="#The-Shopt-Builtin-1"> ¶</a></span></h4>
|
|
|
|
<p>This builtin allows you to change additional optional shell behavior.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a id="index-shopt"></a><span><code class="code">shopt</code><a class="copiable-link" href="#index-shopt"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">shopt [-pqsu] [-o] [<var class="var">optname</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Toggle the values of settings controlling optional shell behavior.
|
|
The settings can be either those listed below, or, if the
|
|
<samp class="option">-o</samp> option is used, those available with the <samp class="option">-o</samp>
|
|
option to the <code class="code">set</code> builtin command (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
</p>
|
|
<p>With no options, or with the <samp class="option">-p</samp> option, display a list of all
|
|
settable options, with an indication of whether or not each is set;
|
|
if any <var class="var">optname</var>s are supplied, the output is restricted to those options.
|
|
The <samp class="option">-p</samp> option displays output in a form that
|
|
may be reused as input.
|
|
</p>
|
|
<p>Other options have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>Enable (set) each <var class="var">optname</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-u</code></dt>
|
|
<dd><p>Disable (unset) each <var class="var">optname</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-q</code></dt>
|
|
<dd><p>Suppresses normal output; the return status
|
|
indicates whether the <var class="var">optname</var> is set or unset.
|
|
If multiple <var class="var">optname</var> arguments are supplied with <samp class="option">-q</samp>,
|
|
the return status is zero if all <var class="var">optname</var>s are enabled;
|
|
non-zero otherwise.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-o</code></dt>
|
|
<dd><p>Restricts the values of
|
|
<var class="var">optname</var> to be those defined for the <samp class="option">-o</samp> option to the
|
|
<code class="code">set</code> builtin (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If either <samp class="option">-s</samp> or <samp class="option">-u</samp>
|
|
is used with no <var class="var">optname</var> arguments, <code class="code">shopt</code> shows only
|
|
those options which are set or unset, respectively.
|
|
</p>
|
|
<p>Unless otherwise noted, the <code class="code">shopt</code> options are disabled (off)
|
|
by default.
|
|
</p>
|
|
<p>The return status when listing options is zero if all <var class="var">optname</var>s
|
|
are enabled, non-zero otherwise. When setting or unsetting options,
|
|
the return status is zero unless an <var class="var">optname</var> is not a valid shell
|
|
option.
|
|
</p>
|
|
<p>The list of <code class="code">shopt</code> options is:
|
|
</p><dl class="table">
|
|
<dt><code class="code">array_expand_once</code></dt>
|
|
<dd><p>If set, the shell suppresses multiple evaluation of
|
|
associative and indexed array subscripts
|
|
during arithmetic expression evaluation, while executing
|
|
builtins that can perform variable assignments,
|
|
and while executing builtins that perform array dereferencing.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">assoc_expand_once</code></dt>
|
|
<dd><p>Deprecated; a synonym for <code class="code">array_expand_once</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">autocd</code></dt>
|
|
<dd><p>If set, a command name that is the name of a directory is executed as if
|
|
it were the argument to the <code class="code">cd</code> command.
|
|
This option is only used by interactive shells.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">bash_source_fullpath</code></dt>
|
|
<dd><p>If set, filenames added to the <code class="code">BASH_SOURCE</code> array variable are
|
|
converted to full pathnames (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">cdable_vars</code></dt>
|
|
<dd><p>If this is set, an argument to the <code class="code">cd</code> builtin command that
|
|
is not a directory is assumed to be the name of a variable whose
|
|
value is the directory to change to.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">cdspell</code></dt>
|
|
<dd><p>If set, the <code class="code">cd</code> command
|
|
attempts to correct
|
|
minor errors in the spelling of a directory component.
|
|
Minor errors include transposed characters,
|
|
a missing character, and one extra character.
|
|
If <code class="code">cd</code> corrects the directory name, it prints the corrected filename,
|
|
and the command proceeds.
|
|
This option is only used by interactive shells.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">checkhash</code></dt>
|
|
<dd><p>If this is set, Bash checks that a command found in the hash
|
|
table exists before trying to execute it.
|
|
If a hashed command no longer exists, Bash performs a normal path search.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">checkjobs</code></dt>
|
|
<dd><p>If set, Bash lists the status of any stopped and running jobs before
|
|
exiting an interactive shell.
|
|
If any jobs are running, Bash defers
|
|
the exit until a second exit is attempted without an
|
|
intervening command (see <a class="pxref" href="#Job-Control">Job Control</a>).
|
|
The shell always postpones exiting if any jobs are stopped.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">checkwinsize</code></dt>
|
|
<dd><p>If set, Bash checks the window size after each external (non-builtin)
|
|
command and, if necessary, updates the values of
|
|
<code class="env">LINES</code> and <code class="env">COLUMNS</code>,
|
|
using the file descriptor associated with stderr if it is a terminal.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">cmdhist</code></dt>
|
|
<dd><p>If set, Bash
|
|
attempts to save all lines of a multiple-line
|
|
command in the same history entry.
|
|
This allows easy re-editing of multi-line commands.
|
|
This option is enabled by default, but only has an effect if command
|
|
history is enabled (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">compat31</code></dt>
|
|
<dt><code class="code">compat32</code></dt>
|
|
<dt><code class="code">compat40</code></dt>
|
|
<dt><code class="code">compat41</code></dt>
|
|
<dt><code class="code">compat42</code></dt>
|
|
<dt><code class="code">compat43</code></dt>
|
|
<dt><code class="code">compat44</code></dt>
|
|
<dd><p>These control aspects of the shell’s compatibility mode
|
|
(see <a class="pxref" href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">complete_fullquote</code></dt>
|
|
<dd><p>If set, Bash
|
|
quotes all shell metacharacters in filenames and directory names when
|
|
performing completion.
|
|
If not set, Bash
|
|
removes metacharacters such as the dollar sign from the set of
|
|
characters that will be quoted in completed filenames
|
|
when these metacharacters appear in shell variable references in words to be
|
|
completed.
|
|
This means that dollar signs in variable names that expand to directories
|
|
will not be quoted;
|
|
however, any dollar signs appearing in filenames will not be quoted, either.
|
|
This is active only when Bash is using backslashes to quote completed
|
|
filenames.
|
|
This variable is set by default, which is the default Bash behavior in
|
|
versions through 4.2.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">direxpand</code></dt>
|
|
<dd><p>If set, Bash
|
|
replaces directory names with the results of word expansion when performing
|
|
filename completion.
|
|
This changes the contents of the Readline editing buffer.
|
|
If not set, Bash attempts to preserve what the user typed.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">dirspell</code></dt>
|
|
<dd><p>If set, Bash
|
|
attempts spelling correction on directory names during word completion
|
|
if the directory name initially supplied does not exist.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">dotglob</code></dt>
|
|
<dd><p>If set, Bash includes filenames beginning with a ‘<samp class="samp">.</samp>’ in
|
|
the results of filename expansion.
|
|
The filenames <samp class="file">.</samp> and <samp class="file">..</samp> must always be matched explicitly,
|
|
even if <code class="code">dotglob</code> is set.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">execfail</code></dt>
|
|
<dd><p>If this is set, a non-interactive shell will not exit if
|
|
it cannot execute the file specified as an argument to the <code class="code">exec</code>
|
|
builtin.
|
|
An interactive shell does not exit if <code class="code">exec</code> fails.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">expand_aliases</code></dt>
|
|
<dd><p>If set, aliases are expanded as described below under Aliases,
|
|
<a class="ref" href="#Aliases">Aliases</a>.
|
|
This option is enabled by default for interactive shells.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">extdebug</code></dt>
|
|
<dd><p>If set at shell invocation, or in a shell startup file,
|
|
arrange to execute the debugger profile
|
|
before the shell starts, identical to the <samp class="option">--debugger</samp> option.
|
|
If set after invocation, behavior intended for use by debuggers is enabled:
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> The <samp class="option">-F</samp> option to the <code class="code">declare</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>)
|
|
displays the source file name and line number corresponding to each function
|
|
name supplied as an argument.
|
|
|
|
</li><li> If the command run by the <code class="code">DEBUG</code> trap returns a non-zero value, the
|
|
next command is skipped and not executed.
|
|
|
|
</li><li> If the command run by the <code class="code">DEBUG</code> trap returns a value of 2, and the
|
|
shell is executing in a subroutine (a shell function or a shell script
|
|
executed by the <code class="code">.</code> or <code class="code">source</code> builtins), the shell simulates
|
|
a call to <code class="code">return</code>.
|
|
|
|
</li><li> <code class="code">BASH_ARGC</code> and <code class="code">BASH_ARGV</code> are updated as described in their
|
|
descriptions (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
</li><li> Function tracing is enabled: command substitution, shell functions, and
|
|
subshells invoked with <code class="code">( <var class="var">command</var> )</code> inherit the
|
|
<code class="code">DEBUG</code> and <code class="code">RETURN</code> traps.
|
|
|
|
</li><li> Error tracing is enabled: command substitution, shell functions, and
|
|
subshells invoked with <code class="code">( <var class="var">command</var> )</code> inherit the
|
|
<code class="code">ERR</code> trap.
|
|
</li></ol>
|
|
|
|
</dd>
|
|
<dt><code class="code">extglob</code></dt>
|
|
<dd><p>If set, enable the extended pattern matching features described above
|
|
(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">extquote</code></dt>
|
|
<dd><p>If set, <code class="code">$'<var class="var">string</var>'</code> and <code class="code">$"<var class="var">string</var>"</code> quoting is
|
|
performed within <code class="code">${<var class="var">parameter</var>}</code> expansions
|
|
enclosed in double quotes.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">failglob</code></dt>
|
|
<dd><p>If set, patterns which fail to match filenames during filename expansion
|
|
result in an expansion error.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">force_fignore</code></dt>
|
|
<dd><p>If set, the suffixes specified by the <code class="env">FIGNORE</code> shell variable
|
|
cause words to be ignored when performing word completion even if
|
|
the ignored words are the only possible completions.
|
|
See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a description of <code class="env">FIGNORE</code>.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">globasciiranges</code></dt>
|
|
<dd><p>If set, range expressions used in pattern matching bracket expressions
|
|
(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>)
|
|
behave as if in the traditional C locale when performing
|
|
comparisons.
|
|
That is, pattern matching does not take
|
|
the current locale’s collating sequence into account,
|
|
so ‘<samp class="samp">b</samp>’ will not collate between ‘<samp class="samp">A</samp>’ and ‘<samp class="samp">B</samp>’,
|
|
and upper-case and lower-case ASCII characters will collate together.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">globskipdots</code></dt>
|
|
<dd><p>If set, filename expansion will never match the filenames
|
|
<samp class="file">.</samp> and <samp class="file">..</samp>, even if the pattern begins with a ‘<samp class="samp">.</samp>’.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">globstar</code></dt>
|
|
<dd><p>If set, the pattern ‘<samp class="samp">**</samp>’ used in a filename expansion context will
|
|
match all files and zero or more directories and subdirectories.
|
|
If the pattern is followed by a ‘<samp class="samp">/</samp>’, only directories and
|
|
subdirectories match.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">gnu_errfmt</code></dt>
|
|
<dd><p>If set, shell error messages are written in the standard <small class="sc">GNU</small> error
|
|
message format.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">histappend</code></dt>
|
|
<dd><p>If set, the history list is appended to the file named by the value
|
|
of the <code class="env">HISTFILE</code>
|
|
variable when the shell exits, rather than overwriting the file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">histreedit</code></dt>
|
|
<dd><p>If set, and Readline is being used,
|
|
the user is given the opportunity to re-edit a failed history substitution.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">histverify</code></dt>
|
|
<dd><p>If set, and Readline
|
|
is being used, the results of history substitution are not immediately
|
|
passed to the shell parser.
|
|
Instead, the resulting line is loaded into the Readline editing buffer,
|
|
allowing further modification.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">hostcomplete</code></dt>
|
|
<dd><p>If set, and Readline is being used, Bash will attempt to perform
|
|
hostname completion when a word containing a ‘<samp class="samp">@</samp>’ is being
|
|
completed (see <a class="pxref" href="#Commands-For-Completion">Letting Readline Type For You</a>).
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">huponexit</code></dt>
|
|
<dd><p>If set, Bash will send <code class="code">SIGHUP</code> to all jobs when an interactive
|
|
login shell exits (see <a class="pxref" href="#Signals">Signals</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">inherit_errexit</code></dt>
|
|
<dd><p>If set, command substitution inherits the value of the <code class="code">errexit</code> option,
|
|
instead of unsetting it in the subshell environment.
|
|
This option is enabled when <small class="sc">POSIX</small> mode is enabled.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">interactive_comments</code></dt>
|
|
<dd><p>In an interactive shell, a word beginning with ‘<samp class="samp">#</samp>’
|
|
causes that word and all remaining characters on that
|
|
line to be ignored, as in a non-interactive shell.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">lastpipe</code></dt>
|
|
<dd><p>If set, and job control is not active, the shell runs the last command of
|
|
a pipeline not executed in the background in the current shell environment.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">lithist</code></dt>
|
|
<dd><p>If enabled, and the <code class="code">cmdhist</code>
|
|
option is enabled, multi-line commands are saved to the history with
|
|
embedded newlines rather than using semicolon separators where possible.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">localvar_inherit</code></dt>
|
|
<dd><p>If set, local variables inherit the value and attributes of a variable of
|
|
the same name that exists at a previous scope before any new value is
|
|
assigned. The <code class="code">nameref</code> attribute is not inherited.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">localvar_unset</code></dt>
|
|
<dd><p>If set, calling <code class="code">unset</code> on local variables in previous function scopes
|
|
marks them so subsequent lookups find them unset until that function
|
|
returns.
|
|
This is identical to the behavior of unsetting local variables at the
|
|
current function scope.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">login_shell</code></dt>
|
|
<dd><p>The shell sets this option if it is started as a login shell
|
|
(see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>).
|
|
The value may not be changed.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">mailwarn</code></dt>
|
|
<dd><p>If set, and a file that Bash is checking for mail has been
|
|
accessed since the last time it was checked, Bash displays the message
|
|
<code class="code">"The mail in <var class="var">mailfile</var> has been read"</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">no_empty_cmd_completion</code></dt>
|
|
<dd><p>If set, and Readline is being used, Bash does not search
|
|
the <code class="env">PATH</code>
|
|
for possible completions when completion is attempted on an empty line.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">nocaseglob</code></dt>
|
|
<dd><p>If set, Bash matches filenames in a case-insensitive fashion when
|
|
performing filename expansion.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">nocasematch</code></dt>
|
|
<dd><p>If set, Bash matches patterns in a case-insensitive fashion when
|
|
performing matching while executing <code class="code">case</code> or <code class="code">[[</code>
|
|
conditional commands (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>),
|
|
when performing pattern substitution word expansions,
|
|
or when filtering possible completions as part of programmable completion.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">noexpand_translation</code></dt>
|
|
<dd><p>If set, Bash
|
|
encloses the translated results of $"…" quoting in single quotes
|
|
instead of double quotes.
|
|
If the string is not translated, this has no effect.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">nullglob</code></dt>
|
|
<dd><p>If set, filename expansion patterns which match no files
|
|
(see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>)
|
|
expand to nothing and are removed, rather than expanding to themselves.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">patsub_replacement</code></dt>
|
|
<dd><p>If set, Bash
|
|
expands occurrences of ‘<samp class="samp">&</samp>’ in the replacement string of pattern
|
|
substitution to the text matched by the pattern, as described
|
|
above (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">progcomp</code></dt>
|
|
<dd><p>If set, enable the programmable completion facilities
|
|
(see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">progcomp_alias</code></dt>
|
|
<dd><p>If set, and programmable completion is enabled, Bash treats a command
|
|
name that doesn’t have any completions as a possible alias and attempts
|
|
alias expansion.
|
|
If it has an alias, Bash attempts programmable
|
|
completion using the command word resulting from the expanded alias.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">promptvars</code></dt>
|
|
<dd><p>If set, prompt strings undergo
|
|
parameter expansion, command substitution, arithmetic
|
|
expansion, and quote removal after being expanded
|
|
as described below (see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>).
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">restricted_shell</code></dt>
|
|
<dd><p>The shell sets this option if it is started in restricted mode
|
|
(see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>).
|
|
The value may not be changed.
|
|
This is not reset when the startup files are executed, allowing
|
|
the startup files to discover whether or not a shell is restricted.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">shift_verbose</code></dt>
|
|
<dd><p>If this is set, the <code class="code">shift</code>
|
|
builtin prints an error message when the shift count exceeds the
|
|
number of positional parameters.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">sourcepath</code></dt>
|
|
<dd><p>If set, the <code class="code">.</code> (<code class="code">source</code>) builtin uses the value of <code class="env">PATH</code>
|
|
to find the directory containing the file supplied as an argument
|
|
when the <samp class="option">-p</samp> option is not supplied.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">varredir_close</code></dt>
|
|
<dd><p>If set, the shell automatically closes file descriptors assigned using the
|
|
<code class="code">{varname}</code> redirection syntax (see <a class="pxref" href="#Redirections">Redirections</a>) instead of
|
|
leaving them open when the command completes.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">xpg_echo</code></dt>
|
|
<dd><p>If set, the <code class="code">echo</code> builtin expands backslash-escape sequences
|
|
by default.
|
|
If the <code class="code">posix</code> shell option (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>) is also enabled,
|
|
<code class="code">echo</code> does not interpret any options.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Special-Builtins">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Modifying-Shell-Behavior" accesskey="p" rel="prev">Modifying Shell Behavior</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Special-Builtins-1"><span>4.4 Special Builtins<a class="copiable-link" href="#Special-Builtins-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-special-builtin-1"></a>
|
|
|
|
<p>For historical reasons, the <small class="sc">POSIX</small> standard has classified
|
|
several builtin commands as <em class="emph">special</em>.
|
|
When Bash is executing in <small class="sc">POSIX</small> mode, the special builtins
|
|
differ from other builtin commands in three respects:
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> Special builtins are found before shell functions during command lookup.
|
|
|
|
</li><li> If a special builtin returns an error status, a non-interactive shell exits.
|
|
|
|
</li><li> Assignment statements preceding the command stay in effect in the shell
|
|
environment after the command completes.
|
|
</li></ol>
|
|
|
|
<p>When Bash is not executing in <small class="sc">POSIX</small> mode, these builtins behave no
|
|
differently than the rest of the Bash builtin commands.
|
|
The Bash <small class="sc">POSIX</small> mode is described in <a class="ref" href="#Bash-POSIX-Mode">Bash and POSIX</a>.
|
|
</p>
|
|
<p>These are the <small class="sc">POSIX</small> special builtins:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">break : . source continue eval exec exit export readonly return set<!-- /@w -->
|
|
shift times trap unset<!-- /@w -->
|
|
</pre></div>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Shell-Variables">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bash-Features" accesskey="n" rel="next">Bash Features</a>, Previous: <a href="#Shell-Builtin-Commands" accesskey="p" rel="prev">Shell Builtin Commands</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Shell-Variables-1"><span>5 Shell Variables<a class="copiable-link" href="#Shell-Variables-1"> ¶</a></span></h2>
|
|
|
|
|
|
<p>This chapter describes the shell variables that Bash uses.
|
|
Bash automatically assigns default values to a number of variables.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Bourne-Shell-Variables" accesskey="1">Bourne Shell Variables</a></li>
|
|
<li><a href="#Bash-Variables" accesskey="2">Bash Variables</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Bourne-Shell-Variables">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bash-Variables" accesskey="n" rel="next">Bash Variables</a>, Up: <a href="#Shell-Variables" accesskey="u" rel="up">Shell Variables</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bourne-Shell-Variables-1"><span>5.1 Bourne Shell Variables<a class="copiable-link" href="#Bourne-Shell-Variables-1"> ¶</a></span></h3>
|
|
|
|
<p>Bash uses certain shell variables in the same way as the Bourne shell.
|
|
In some cases, Bash assigns a default value to the variable.
|
|
</p>
|
|
<dl class="vtable">
|
|
<dt><a id="index-CDPATH"></a><span><code class="code">CDPATH</code><a class="copiable-link" href="#index-CDPATH"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of directories used as a search path for
|
|
the <code class="code">cd</code> builtin command.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HOME"></a><span><code class="code">HOME</code><a class="copiable-link" href="#index-HOME"> ¶</a></span></dt>
|
|
<dd><p>The current user’s home directory; the default for the <code class="code">cd</code> builtin
|
|
command.
|
|
The value of this variable is also used by tilde expansion
|
|
(see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-IFS"></a><span><code class="code">IFS</code><a class="copiable-link" href="#index-IFS"> ¶</a></span></dt>
|
|
<dd><p>A list of characters that separate fields; used when the shell splits
|
|
words as part of expansion and by the <code class="code">read</code> builtin to split
|
|
lines into words.
|
|
See <a class="xref" href="#Word-Splitting">Word Splitting</a>, for a description of word splitting.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-MAIL"></a><span><code class="code">MAIL</code><a class="copiable-link" href="#index-MAIL"> ¶</a></span></dt>
|
|
<dd><p>If the value is set to a filename or directory name
|
|
and the <code class="env">MAILPATH</code> variable
|
|
is not set, Bash informs the user of the arrival of mail in
|
|
the specified file or Maildir-format directory.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-MAILPATH"></a><span><code class="code">MAILPATH</code><a class="copiable-link" href="#index-MAILPATH"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of filenames which the shell periodically checks
|
|
for new mail.
|
|
Each list entry can specify the message that is printed when new mail
|
|
arrives in the mail file by separating the filename from the message with
|
|
a ‘<samp class="samp">?</samp>’.
|
|
When used in the text of the message, <code class="code">$_</code> expands to the name of
|
|
the current mail file.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-OPTARG"></a><span><code class="code">OPTARG</code><a class="copiable-link" href="#index-OPTARG"> ¶</a></span></dt>
|
|
<dd><p>The value of the last option argument processed by the <code class="code">getopts</code> builtin.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-OPTIND"></a><span><code class="code">OPTIND</code><a class="copiable-link" href="#index-OPTIND"> ¶</a></span></dt>
|
|
<dd><p>The index of the next argument to be processed by the <code class="code">getopts</code> builtin.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PATH"></a><span><code class="code">PATH</code><a class="copiable-link" href="#index-PATH"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of directories in which the shell looks for
|
|
commands.
|
|
A zero-length (null) directory name in the value of <code class="code">PATH</code> indicates the
|
|
current directory.
|
|
A null directory name may appear as two adjacent colons, or as an initial
|
|
or trailing colon.
|
|
The default path is system-dependent, and is set by the administrator
|
|
who installs <code class="code">bash</code>.
|
|
A common value is
|
|
"/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin".
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PS1"></a><span><code class="code">PS1</code><a class="copiable-link" href="#index-PS1"> ¶</a></span></dt>
|
|
<dd><p>The primary prompt string.
|
|
The default value is ‘<samp class="samp">\s-\v\$ </samp>’.
|
|
See <a class="xref" href="#Controlling-the-Prompt">Controlling the Prompt</a>, for the complete list of escape
|
|
sequences that are expanded before <code class="env">PS1</code> is displayed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PS2"></a><span><code class="code">PS2</code><a class="copiable-link" href="#index-PS2"> ¶</a></span></dt>
|
|
<dd><p>The secondary prompt string.
|
|
The default value is ‘<samp class="samp">> </samp>’.
|
|
<code class="env">PS2</code> is expanded in the same way as <code class="env">PS1</code> before being
|
|
displayed.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Bash-Variables">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Bourne-Shell-Variables" accesskey="p" rel="prev">Bourne Shell Variables</a>, Up: <a href="#Shell-Variables" accesskey="u" rel="up">Shell Variables</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bash-Variables-1"><span>5.2 Bash Variables<a class="copiable-link" href="#Bash-Variables-1"> ¶</a></span></h3>
|
|
|
|
<p>These variables are set or used by Bash, but other shells
|
|
do not normally treat them specially.
|
|
</p>
|
|
<p>A few variables used by Bash are described in different chapters:
|
|
variables for controlling the job control facilities
|
|
(see <a class="pxref" href="#Job-Control-Variables">Job Control Variables</a>).
|
|
</p>
|
|
<dl class="vtable">
|
|
<dt><a id="index-_005f"></a><span><code class="code">_</code><a class="copiable-link" href="#index-_005f"> ¶</a></span></dt>
|
|
<dd><a class="index-entry-id" id="index-_0024_005f"></a>
|
|
<p>($_, an underscore.)
|
|
This has a number of meanings depending on context.
|
|
At shell startup, $_ set to the pathname used to invoke the
|
|
shell or shell script being executed as passed in the environment
|
|
or argument list.
|
|
Subsequently, it expands to the last argument to the previous simple
|
|
command executed in the foreground, after expansion.
|
|
It is also set to the full pathname used to invoke each command executed
|
|
and placed in the environment exported to that command.
|
|
When checking mail, $_ expands to the name of the mail file.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH"></a><span><code class="code">BASH</code><a class="copiable-link" href="#index-BASH"> ¶</a></span></dt>
|
|
<dd><p>The full pathname used to execute the current instance of Bash.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASHOPTS"></a><span><code class="code">BASHOPTS</code><a class="copiable-link" href="#index-BASHOPTS"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of enabled shell options.
|
|
Each word in the list is a valid argument for the <samp class="option">-s</samp> option
|
|
to the <code class="code">shopt</code> builtin command (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
The options appearing in <code class="env">BASHOPTS</code> are those reported
|
|
as ‘<samp class="samp">on</samp>’ by ‘<samp class="samp">shopt</samp>’.
|
|
If this variable is in the environment when Bash
|
|
starts up, the shell enables each option in the list before
|
|
reading any startup files.
|
|
If this variable is exported, child shells will enable each option
|
|
in the list.
|
|
This variable is readonly.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASHPID"></a><span><code class="code">BASHPID</code><a class="copiable-link" href="#index-BASHPID"> ¶</a></span></dt>
|
|
<dd><p>Expands to the process <small class="sc">ID</small> of the current Bash process.
|
|
This differs from <code class="code">$$</code> under certain circumstances, such as subshells
|
|
that do not require Bash to be re-initialized.
|
|
Assignments to <code class="env">BASHPID</code> have no effect.
|
|
If <code class="env">BASHPID</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fALIASES"></a><span><code class="code">BASH_ALIASES</code><a class="copiable-link" href="#index-BASH_005fALIASES"> ¶</a></span></dt>
|
|
<dd><p>An associative array variable whose members correspond to the internal
|
|
list of aliases as maintained by the <code class="code">alias</code> builtin.
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
Elements added to this array appear in the alias list; however,
|
|
unsetting array elements currently does not cause aliases to be removed
|
|
from the alias list.
|
|
If <code class="env">BASH_ALIASES</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fARGC"></a><span><code class="code">BASH_ARGC</code><a class="copiable-link" href="#index-BASH_005fARGC"> ¶</a></span></dt>
|
|
<dd><p>An array variable whose values are the number of parameters in each
|
|
frame of the current Bash execution call stack.
|
|
The number of parameters to the current subroutine (shell function or
|
|
script executed with <code class="code">.</code> or <code class="code">source</code>) is at the top of the stack.
|
|
When a
|
|
subroutine is executed, the number of parameters passed is pushed onto
|
|
<code class="code">BASH_ARGC</code>.
|
|
The shell sets <code class="code">BASH_ARGC</code> only when in extended debugging mode
|
|
(see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>
|
|
for a description of the <code class="code">extdebug</code> option to the <code class="code">shopt</code>
|
|
builtin).
|
|
Setting <code class="code">extdebug</code> after the shell has started to execute a subroutine,
|
|
or referencing this variable when <code class="code">extdebug</code> is not set,
|
|
may result in inconsistent values.
|
|
Assignments to <code class="env">BASH_ARGC</code> have no effect, and it may not be unset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fARGV"></a><span><code class="code">BASH_ARGV</code><a class="copiable-link" href="#index-BASH_005fARGV"> ¶</a></span></dt>
|
|
<dd><p>An array variable containing all of the parameters in the current Bash
|
|
execution call stack.
|
|
The final parameter of the last subroutine call is at the top of the stack;
|
|
the first parameter of the initial call is at the bottom.
|
|
When a subroutine is executed, the shell pushes the supplied parameters
|
|
onto <code class="code">BASH_ARGV</code>.
|
|
The shell sets <code class="code">BASH_ARGV</code> only when in extended debugging mode
|
|
(see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>
|
|
for a description of the <code class="code">extdebug</code> option to the <code class="code">shopt</code>
|
|
builtin).
|
|
Setting <code class="code">extdebug</code> after the shell has started to execute a script,
|
|
or referencing this variable when <code class="code">extdebug</code> is not set,
|
|
may result in inconsistent values.
|
|
Assignments to <code class="env">BASH_ARGV</code> have no effect, and it may not be unset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fARGV0"></a><span><code class="code">BASH_ARGV0</code><a class="copiable-link" href="#index-BASH_005fARGV0"> ¶</a></span></dt>
|
|
<dd><p>When referenced, this variable expands to the name of the shell or shell
|
|
script (identical to <code class="code">$0</code>; See <a class="xref" href="#Special-Parameters">Special Parameters</a>,
|
|
for the description of special parameter 0).
|
|
Assigning a value to
|
|
<code class="code">BASH_ARGV0</code>
|
|
sets <code class="code">$0</code> to the same value.
|
|
If
|
|
<code class="env">BASH_ARGV0</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fCMDS"></a><span><code class="code">BASH_CMDS</code><a class="copiable-link" href="#index-BASH_005fCMDS"> ¶</a></span></dt>
|
|
<dd><p>An associative array variable whose members correspond to the internal
|
|
hash table of commands as maintained by the <code class="code">hash</code> builtin
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
Adding elements to this array makes them appear in the hash table; however,
|
|
unsetting array elements currently does not remove command names
|
|
from the hash table.
|
|
If <code class="env">BASH_CMDS</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fCOMMAND"></a><span><code class="code">BASH_COMMAND</code><a class="copiable-link" href="#index-BASH_005fCOMMAND"> ¶</a></span></dt>
|
|
<dd><p>Expands to the command currently being executed or about to be executed,
|
|
unless the shell is executing a command as the result of a trap,
|
|
in which case it is the command executing at the time of the trap.
|
|
If <code class="env">BASH_COMMAND</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fCOMPAT"></a><span><code class="code">BASH_COMPAT</code><a class="copiable-link" href="#index-BASH_005fCOMPAT"> ¶</a></span></dt>
|
|
<dd><p>The value is used to set the shell’s compatibility level.
|
|
See <a class="xref" href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>, for a description of the various
|
|
compatibility levels and their effects.
|
|
The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
|
|
corresponding to the desired compatibility level.
|
|
If <code class="env">BASH_COMPAT</code> is unset or set to the empty string, the compatibility
|
|
level is set to the default for the current version.
|
|
If <code class="env">BASH_COMPAT</code> is set to a value that is not one of the valid
|
|
compatibility levels, the shell prints an error message and sets the
|
|
compatibility level to the default for the current version.
|
|
A subset of the valid values correspond to the compatibility levels
|
|
described below (see <a class="pxref" href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>).
|
|
For example, 4.2 and 42 are valid values that correspond
|
|
to the <code class="code">compat42</code> <code class="code">shopt</code> option
|
|
and set the compatibility level to 42.
|
|
The current version is also a valid value.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fENV"></a><span><code class="code">BASH_ENV</code><a class="copiable-link" href="#index-BASH_005fENV"> ¶</a></span></dt>
|
|
<dd><p>If this variable is set when Bash is invoked to execute a shell
|
|
script, its value is expanded and used as the name of a startup file
|
|
to read before executing the script.
|
|
Bash does not use <code class="env">PATH</code> to search for the resultant filename.
|
|
See <a class="xref" href="#Bash-Startup-Files">Bash Startup Files</a>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fEXECUTION_005fSTRING"></a><span><code class="code">BASH_EXECUTION_STRING</code><a class="copiable-link" href="#index-BASH_005fEXECUTION_005fSTRING"> ¶</a></span></dt>
|
|
<dd><p>The command argument to the <samp class="option">-c</samp> invocation option.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fLINENO"></a><span><code class="code">BASH_LINENO</code><a class="copiable-link" href="#index-BASH_005fLINENO"> ¶</a></span></dt>
|
|
<dd><p>An array variable whose members are the line numbers in source files
|
|
where each corresponding member of <code class="env">FUNCNAME</code> was invoked.
|
|
<code class="code">${BASH_LINENO[$i]}</code> is the line number in the source file
|
|
(<code class="code">${BASH_SOURCE[$i+1]}</code>) where
|
|
<code class="code">${FUNCNAME[$i]}</code> was called (or <code class="code">${BASH_LINENO[$i-1]}</code> if
|
|
referenced within another shell function).
|
|
Use <code class="code">LINENO</code> to obtain the current line number.
|
|
Assignments to <code class="env">BASH_LINENO</code> have no effect, and it may not be unset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fLOADABLES_005fPATH"></a><span><code class="code">BASH_LOADABLES_PATH</code><a class="copiable-link" href="#index-BASH_005fLOADABLES_005fPATH"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of directories in which the <code class="code">enable</code>
|
|
command looks for dynamically loadable builtins.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fMONOSECONDS"></a><span><code class="code">BASH_MONOSECONDS</code><a class="copiable-link" href="#index-BASH_005fMONOSECONDS"> ¶</a></span></dt>
|
|
<dd><p>Each time this variable is referenced, it expands to the value returned
|
|
by the system’s monotonic clock, if one is available.
|
|
If there is no monotonic clock, this is equivalent to <code class="env">EPOCHSECONDS</code>.
|
|
If <code class="env">BASH_MONOSECONDS</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fREMATCH"></a><span><code class="code">BASH_REMATCH</code><a class="copiable-link" href="#index-BASH_005fREMATCH"> ¶</a></span></dt>
|
|
<dd><p>An array variable whose members are assigned by the ‘<samp class="samp">=~</samp>’ binary
|
|
operator to the <code class="code">[[</code> conditional command
|
|
(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
The element with index 0 is the portion of the string
|
|
matching the entire regular expression.
|
|
The element with index <var class="var">n</var> is the portion of the
|
|
string matching the <var class="var">n</var>th parenthesized subexpression.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fSOURCE"></a><span><code class="code">BASH_SOURCE</code><a class="copiable-link" href="#index-BASH_005fSOURCE"> ¶</a></span></dt>
|
|
<dd><p>An array variable whose members are the source filenames where the
|
|
corresponding shell function names in the <code class="code">FUNCNAME</code> array
|
|
variable are defined.
|
|
The shell function <code class="code">${FUNCNAME[$i]}</code> is defined in the file
|
|
<code class="code">${BASH_SOURCE[$i]}</code> and called from <code class="code">${BASH_SOURCE[$i+1]}</code>
|
|
Assignments to <code class="env">BASH_SOURCE</code> have no effect, and it may not be unset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fSUBSHELL"></a><span><code class="code">BASH_SUBSHELL</code><a class="copiable-link" href="#index-BASH_005fSUBSHELL"> ¶</a></span></dt>
|
|
<dd><p>Incremented by one within each subshell or subshell environment when
|
|
the shell begins executing in that environment.
|
|
The initial value is 0.
|
|
If <code class="env">BASH_SUBSHELL</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fTRAPSIG"></a><span><code class="code">BASH_TRAPSIG</code><a class="copiable-link" href="#index-BASH_005fTRAPSIG"> ¶</a></span></dt>
|
|
<dd><p>Set to the signal number corresponding to the trap action being executed
|
|
during its execution.
|
|
See the description of <code class="code">trap</code>
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
for information about signal numbers and trap execution.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fVERSINFO"></a><span><code class="code">BASH_VERSINFO</code><a class="copiable-link" href="#index-BASH_005fVERSINFO"> ¶</a></span></dt>
|
|
<dd><p>A readonly array variable (see <a class="pxref" href="#Arrays">Arrays</a>)
|
|
whose members hold version information for this instance of Bash.
|
|
The values assigned to the array members are as follows:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">BASH_VERSINFO[0]</code></dt>
|
|
<dd><p>The major version number (the <em class="dfn">release</em>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">BASH_VERSINFO[1]</code></dt>
|
|
<dd><p>The minor version number (the <em class="dfn">version</em>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">BASH_VERSINFO[2]</code></dt>
|
|
<dd><p>The patch level.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">BASH_VERSINFO[3]</code></dt>
|
|
<dd><p>The build version.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">BASH_VERSINFO[4]</code></dt>
|
|
<dd><p>The release status (e.g., <code class="code">beta</code>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">BASH_VERSINFO[5]</code></dt>
|
|
<dd><p>The value of <code class="env">MACHTYPE</code>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
</dd>
|
|
<dt><a id="index-BASH_005fVERSION"></a><span><code class="code">BASH_VERSION</code><a class="copiable-link" href="#index-BASH_005fVERSION"> ¶</a></span></dt>
|
|
<dd><p>Expands to a string describing the version of this instance of
|
|
Bash (e.g., 5.2.37(3)-release).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-BASH_005fXTRACEFD"></a><span><code class="code">BASH_XTRACEFD</code><a class="copiable-link" href="#index-BASH_005fXTRACEFD"> ¶</a></span></dt>
|
|
<dd><p>If set to an integer corresponding to a valid file descriptor,
|
|
Bash writes the trace output generated when
|
|
‘<samp class="samp">set -x</samp>’
|
|
is enabled to that file descriptor,
|
|
instead of the standard error.
|
|
This allows tracing output to be separated from diagnostic and error
|
|
messages.
|
|
The file descriptor is closed when
|
|
<code class="code">BASH_XTRACEFD</code>
|
|
is unset or assigned a new value.
|
|
Unsetting
|
|
<code class="code">BASH_XTRACEFD</code>
|
|
or assigning it the empty string causes the
|
|
trace output to be sent to the standard error.
|
|
Note that setting
|
|
<code class="code">BASH_XTRACEFD</code>
|
|
to 2 (the standard error file
|
|
descriptor) and then unsetting it will result in the standard error
|
|
being closed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-CHILD_005fMAX"></a><span><code class="code">CHILD_MAX</code><a class="copiable-link" href="#index-CHILD_005fMAX"> ¶</a></span></dt>
|
|
<dd><p>Set the number of exited child status values for the shell to remember.
|
|
Bash will not allow this value to be decreased below a
|
|
<small class="sc">POSIX</small>-mandated minimum,
|
|
and there is a maximum value (currently 8192) that this may not exceed.
|
|
The minimum value is system-dependent.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COLUMNS"></a><span><code class="code">COLUMNS</code><a class="copiable-link" href="#index-COLUMNS"> ¶</a></span></dt>
|
|
<dd><p>Used by the <code class="code">select</code> command to determine the terminal width
|
|
when printing selection lists.
|
|
Automatically set if the <code class="code">checkwinsize</code> option is enabled
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a
|
|
<code class="code">SIGWINCH</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMP_005fCWORD"></a><span><code class="code">COMP_CWORD</code><a class="copiable-link" href="#index-COMP_005fCWORD"> ¶</a></span></dt>
|
|
<dd><p>An index into <code class="env">${COMP_WORDS}</code> of the word containing the current
|
|
cursor position.
|
|
This variable is available only in shell functions invoked by the
|
|
programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMP_005fKEY"></a><span><code class="code">COMP_KEY</code><a class="copiable-link" href="#index-COMP_005fKEY"> ¶</a></span></dt>
|
|
<dd><p>The key (or final key of a key sequence) used to invoke the current
|
|
completion function.
|
|
This variable is available only in shell functions and external
|
|
commands invoked by the
|
|
programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMP_005fLINE"></a><span><code class="code">COMP_LINE</code><a class="copiable-link" href="#index-COMP_005fLINE"> ¶</a></span></dt>
|
|
<dd><p>The current command line.
|
|
This variable is available only in shell functions and external
|
|
commands invoked by the
|
|
programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMP_005fPOINT"></a><span><code class="code">COMP_POINT</code><a class="copiable-link" href="#index-COMP_005fPOINT"> ¶</a></span></dt>
|
|
<dd><p>The index of the current cursor position relative to the beginning of
|
|
the current command.
|
|
If the current cursor position is at the end of the current command,
|
|
the value of this variable is equal to <code class="code">${#COMP_LINE}</code>.
|
|
This variable is available only in shell functions and external
|
|
commands invoked by the
|
|
programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMP_005fTYPE"></a><span><code class="code">COMP_TYPE</code><a class="copiable-link" href="#index-COMP_005fTYPE"> ¶</a></span></dt>
|
|
<dd><p>Set to an integer value corresponding to the type of attempted completion
|
|
that caused a completion function to be called:
|
|
<kbd class="key">TAB</kbd>, for normal completion,
|
|
‘<samp class="samp">?</samp>’, for listing completions after successive tabs,
|
|
‘<samp class="samp">!</samp>’, for listing alternatives on partial word completion,
|
|
‘<samp class="samp">@</samp>’, to list completions if the word is not unmodified,
|
|
or
|
|
‘<samp class="samp">%</samp>’, for menu completion.
|
|
This variable is available only in shell functions and external
|
|
commands invoked by the
|
|
programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMP_005fWORDBREAKS"></a><span><code class="code">COMP_WORDBREAKS</code><a class="copiable-link" href="#index-COMP_005fWORDBREAKS"> ¶</a></span></dt>
|
|
<dd><p>The set of characters that the Readline library treats as word
|
|
separators when performing word completion.
|
|
If <code class="env">COMP_WORDBREAKS</code>
|
|
is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMP_005fWORDS"></a><span><code class="code">COMP_WORDS</code><a class="copiable-link" href="#index-COMP_005fWORDS"> ¶</a></span></dt>
|
|
<dd><p>An array variable consisting of the individual
|
|
words in the current command line.
|
|
The line is split into words as Readline would split it, using
|
|
<code class="code">COMP_WORDBREAKS</code> as described above.
|
|
This variable is available only in shell functions invoked by the
|
|
programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COMPREPLY"></a><span><code class="code">COMPREPLY</code><a class="copiable-link" href="#index-COMPREPLY"> ¶</a></span></dt>
|
|
<dd><p>An array variable from which Bash reads the possible completions
|
|
generated by a shell function invoked by the programmable completion
|
|
facility (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
Each array element contains one possible completion.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-COPROC"></a><span><code class="code">COPROC</code><a class="copiable-link" href="#index-COPROC"> ¶</a></span></dt>
|
|
<dd><p>An array variable created to hold the file descriptors
|
|
for output from and input to an unnamed coprocess (see <a class="pxref" href="#Coprocesses">Coprocesses</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-DIRSTACK"></a><span><code class="code">DIRSTACK</code><a class="copiable-link" href="#index-DIRSTACK"> ¶</a></span></dt>
|
|
<dd><p>An array variable containing the current contents of the directory stack.
|
|
Directories appear in the stack in the order they are displayed by the
|
|
<code class="code">dirs</code> builtin.
|
|
Assigning to members of this array variable may be used to modify
|
|
directories already in the stack, but the <code class="code">pushd</code> and <code class="code">popd</code>
|
|
builtins must be used to add and remove directories.
|
|
Assigning to this variable does not change the current directory.
|
|
If <code class="env">DIRSTACK</code>
|
|
is unset, it loses its special properties, even if
|
|
it is subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-EMACS"></a><span><code class="code">EMACS</code><a class="copiable-link" href="#index-EMACS"> ¶</a></span></dt>
|
|
<dd><p>If Bash finds this variable in the environment when the shell
|
|
starts, and its value is ‘<samp class="samp">t</samp>’, Bash assumes that the shell is
|
|
running in an Emacs shell buffer and disables line editing.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-ENV"></a><span><code class="code">ENV</code><a class="copiable-link" href="#index-ENV"> ¶</a></span></dt>
|
|
<dd><p>Expanded and executed similarly to <code class="code">BASH_ENV</code>
|
|
(see <a class="pxref" href="#Bash-Startup-Files">Bash Startup Files</a>)
|
|
when an interactive shell is invoked in
|
|
<small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-EPOCHREALTIME"></a><span><code class="code">EPOCHREALTIME</code><a class="copiable-link" href="#index-EPOCHREALTIME"> ¶</a></span></dt>
|
|
<dd><p>Each time this parameter is referenced, it expands to the number of seconds
|
|
since the Unix Epoch as a floating-point value with micro-second granularity
|
|
(see the documentation for the C library function <code class="code">time</code> for the
|
|
definition of Epoch).
|
|
Assignments to <code class="env">EPOCHREALTIME</code> are ignored.
|
|
If <code class="env">EPOCHREALTIME</code>
|
|
is unset, it loses its special properties, even if
|
|
it is subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-EPOCHSECONDS"></a><span><code class="code">EPOCHSECONDS</code><a class="copiable-link" href="#index-EPOCHSECONDS"> ¶</a></span></dt>
|
|
<dd><p>Each time this parameter is referenced, it expands to the number of seconds
|
|
since the Unix Epoch (see the documentation for the C library function
|
|
<code class="code">time</code> for the definition of Epoch).
|
|
Assignments to <code class="env">EPOCHSECONDS</code> are ignored.
|
|
If <code class="env">EPOCHSECONDS</code>
|
|
is unset, it loses its special properties, even if
|
|
it is subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-EUID"></a><span><code class="code">EUID</code><a class="copiable-link" href="#index-EUID"> ¶</a></span></dt>
|
|
<dd><p>The numeric effective user id of the current user.
|
|
This variable is readonly.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-EXECIGNORE"></a><span><code class="code">EXECIGNORE</code><a class="copiable-link" href="#index-EXECIGNORE"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of shell patterns (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>)
|
|
defining the set of filenames to be ignored by command search using
|
|
<code class="code">PATH</code>.
|
|
Files whose full pathnames match one of these patterns are not considered
|
|
executable files for the purposes of completion and command execution
|
|
via <code class="code">PATH</code> lookup.
|
|
This does not affect the behavior of the <code class="code">[</code>, <code class="code">test</code>, and <code class="code">[[</code>
|
|
commands.
|
|
Full pathnames in the command hash table are not subject to <code class="code">EXECIGNORE</code>.
|
|
Use this variable to ignore shared library files that have the executable
|
|
bit set, but are not executable files.
|
|
The pattern matching honors the setting of the <code class="code">extglob</code> shell
|
|
option.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-FCEDIT"></a><span><code class="code">FCEDIT</code><a class="copiable-link" href="#index-FCEDIT"> ¶</a></span></dt>
|
|
<dd><p>The editor used as a default by the <code class="code">fc</code> builtin command.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-FIGNORE"></a><span><code class="code">FIGNORE</code><a class="copiable-link" href="#index-FIGNORE"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of suffixes to ignore when performing
|
|
filename completion.
|
|
A filename whose suffix matches one of the entries in
|
|
<code class="env">FIGNORE</code>
|
|
is excluded from the list of matched filenames. A sample
|
|
value is ‘<samp class="samp">.o:~</samp>’
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-FUNCNAME"></a><span><code class="code">FUNCNAME</code><a class="copiable-link" href="#index-FUNCNAME"> ¶</a></span></dt>
|
|
<dd><p>An array variable containing the names of all shell functions
|
|
currently in the execution call stack.
|
|
The element with index 0 is the name of any currently-executing
|
|
shell function.
|
|
The bottom-most element (the one with the highest index)
|
|
is <code class="code">"main"</code>.
|
|
This variable exists only when a shell function is executing.
|
|
Assignments to <code class="env">FUNCNAME</code> have no effect.
|
|
If <code class="env">FUNCNAME</code>
|
|
is unset, it loses its special properties, even if
|
|
it is subsequently reset.
|
|
</p>
|
|
<p>This variable can be used with <code class="code">BASH_LINENO</code> and <code class="code">BASH_SOURCE</code>.
|
|
Each element of <code class="code">FUNCNAME</code> has corresponding elements in
|
|
<code class="code">BASH_LINENO</code> and <code class="code">BASH_SOURCE</code> to describe the call stack.
|
|
For instance,
|
|
<code class="code">${FUNCNAME[$i]}</code>
|
|
was called from the file
|
|
<code class="code">${BASH_SOURCE[$i+1]}</code>
|
|
at line number
|
|
<code class="code">${BASH_LINENO[$i]}</code>.
|
|
The <code class="code">caller</code> builtin displays the current call stack using this
|
|
information.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-FUNCNEST"></a><span><code class="code">FUNCNEST</code><a class="copiable-link" href="#index-FUNCNEST"> ¶</a></span></dt>
|
|
<dd><p>A numeric value greater than 0 defines a maximum function nesting level.
|
|
Function invocations that exceed this nesting level
|
|
cause the current command to abort.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-GLOBIGNORE"></a><span><code class="code">GLOBIGNORE</code><a class="copiable-link" href="#index-GLOBIGNORE"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of patterns defining the set of file names to
|
|
be ignored by filename expansion.
|
|
If a file name matched by a filename expansion pattern also matches one
|
|
of the patterns in <code class="env">GLOBIGNORE</code>, it is removed from the list
|
|
of matches.
|
|
The pattern matching honors the setting of the <code class="code">extglob</code> shell
|
|
option.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-GLOBSORT"></a><span><code class="code">GLOBSORT</code><a class="copiable-link" href="#index-GLOBSORT"> ¶</a></span></dt>
|
|
<dd><p>Controls how the results of filename expansion are sorted.
|
|
The value of this variable specifies the sort criteria and sort order for
|
|
the results of filename expansion.
|
|
If this variable is unset or set to the null string, filename expansion
|
|
uses the historical behavior of sorting by name,
|
|
in ascending lexicographic order as determined by the
|
|
<code class="code">LC_COLLATE</code> shell variable.
|
|
</p>
|
|
<p>If set, a valid value begins with an optional ‘<samp class="samp">+</samp>’, which is ignored,
|
|
or ‘<samp class="samp">-</samp>’, which reverses the sort order from ascending to descending,
|
|
followed by a sort specifier.
|
|
The valid sort specifiers are
|
|
‘<samp class="samp">name</samp>’,
|
|
‘<samp class="samp">numeric</samp>’,
|
|
‘<samp class="samp">size</samp>’,
|
|
‘<samp class="samp">mtime</samp>’,
|
|
‘<samp class="samp">atime</samp>’,
|
|
‘<samp class="samp">ctime</samp>’,
|
|
and
|
|
‘<samp class="samp">blocks</samp>’,
|
|
which sort the files on name,
|
|
names in numeric rather than lexicographic order,
|
|
file size, modification time, access time,
|
|
inode change time, and number of blocks, respectively.
|
|
If any of the non-name keys compare as equal (e.g., if two files are
|
|
the same size), sorting uses the name as a secondary sort key.
|
|
</p>
|
|
<p>For example, a value of <code class="code">-mtime</code> sorts the results in descending
|
|
order by modification time (newest first).
|
|
</p>
|
|
<p>The ‘<samp class="samp">numeric</samp>’ specifier treats names consisting solely of digits as
|
|
numbers and sorts them using their numeric value
|
|
(so “2” sorts before “10”, for example).
|
|
When using ‘<samp class="samp">numeric</samp>’, names containing non-digits sort after all
|
|
the all-digit names and are sorted by name using the traditional behavior.
|
|
</p>
|
|
<p>A sort specifier of ‘<samp class="samp">nosort</samp>’ disables sorting completely;
|
|
Bash returns the results
|
|
in the order they are read from the file system,
|
|
ignoring any leading ‘<samp class="samp">-</samp>’.
|
|
</p>
|
|
<p>If the sort specifier is missing, it defaults to <var class="var">name</var>,
|
|
so a value of ‘<samp class="samp">+</samp>’ is equivalent to the null string,
|
|
and a value of ‘<samp class="samp">-</samp>’ sorts by name in descending order.
|
|
</p>
|
|
<p>Any invalid value restores the historical sorting behavior.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-GROUPS"></a><span><code class="code">GROUPS</code><a class="copiable-link" href="#index-GROUPS"> ¶</a></span></dt>
|
|
<dd><p>An array variable containing the list of groups of which the current
|
|
user is a member.
|
|
Assignments to <code class="env">GROUPS</code> have no effect.
|
|
If <code class="env">GROUPS</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-histchars"></a><span><code class="code">histchars</code><a class="copiable-link" href="#index-histchars"> ¶</a></span></dt>
|
|
<dd><p>The two or three characters which control history expansion,
|
|
quick substitution, and tokenization
|
|
(see <a class="pxref" href="#History-Interaction">History Expansion</a>).
|
|
The first character is the <em class="dfn">history expansion</em> character,
|
|
the character which begins a history expansion, normally
|
|
‘<samp class="samp">!</samp>’.
|
|
The second character is the
|
|
<em class="dfn">quick substitution</em>
|
|
character, normally
|
|
‘<samp class="samp">^</samp>’.
|
|
When it appears as the first character on the line,
|
|
history substitution repeats the previous command,
|
|
replacing one string with another.
|
|
The optional third character is the
|
|
<em class="dfn">history comment</em>
|
|
character, normally ‘<samp class="samp">#</samp>’,
|
|
which indicates
|
|
that the remainder of the line is a comment
|
|
when it appears as the first character of a word.
|
|
The history comment character disables history substitution
|
|
for the remaining words on the line.
|
|
It does not necessarily cause the shell parser to treat the rest of the
|
|
line as a comment.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HISTCMD"></a><span><code class="code">HISTCMD</code><a class="copiable-link" href="#index-HISTCMD"> ¶</a></span></dt>
|
|
<dd><p>The history number, or index in the history list, of the current
|
|
command.
|
|
Assignments to <code class="env">HISTCMD</code>
|
|
have no effect.
|
|
If <code class="env">HISTCMD</code>
|
|
is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HISTCONTROL"></a><span><code class="code">HISTCONTROL</code><a class="copiable-link" href="#index-HISTCONTROL"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of values controlling how commands are saved on
|
|
the history list.
|
|
If the list of values includes ‘<samp class="samp">ignorespace</samp>’, lines which begin
|
|
with a space character are not saved in the history list.
|
|
A value of ‘<samp class="samp">ignoredups</samp>’ causes lines which match the previous
|
|
history entry not to be saved.
|
|
A value of ‘<samp class="samp">ignoreboth</samp>’ is shorthand for
|
|
‘<samp class="samp">ignorespace</samp>’ and ‘<samp class="samp">ignoredups</samp>’.
|
|
A value of ‘<samp class="samp">erasedups</samp>’ causes all previous lines matching the
|
|
current line to be removed from the history list before that line
|
|
is saved.
|
|
Any value not in the above list is ignored.
|
|
If <code class="env">HISTCONTROL</code> is unset, or does not include a valid value,
|
|
Bash saves all lines read by the shell parser on the history list,
|
|
subject to the value of <code class="env">HISTIGNORE</code>.
|
|
If the first line of a multi-line compound command was saved,
|
|
the second and subsequent lines are not tested,
|
|
and are added to the history regardless of the value of
|
|
<code class="env">HISTCONTROL</code>.
|
|
If the first line was not saved, the second and subsequent lines of
|
|
the command are not saved either.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HISTFILE"></a><span><code class="code">HISTFILE</code><a class="copiable-link" href="#index-HISTFILE"> ¶</a></span></dt>
|
|
<dd><p>The name of the file to which the command history is saved.
|
|
Bash assigns a default value of <samp class="file">~/.bash_history</samp>.
|
|
If <code class="env">HISTFILE</code> is unset or null,
|
|
the shell does not save the command history when it exits.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HISTFILESIZE"></a><span><code class="code">HISTFILESIZE</code><a class="copiable-link" href="#index-HISTFILESIZE"> ¶</a></span></dt>
|
|
<dd><p>The maximum number of lines contained in the history file.
|
|
When this variable is assigned a value, the history file is truncated,
|
|
if necessary, to contain no more than
|
|
the number of history entries
|
|
that total no more than that number of lines
|
|
by removing the oldest entries.
|
|
If the history list contains multi-line entries,
|
|
the history file may contain more lines than this maximum
|
|
to avoid leaving partial history entries.
|
|
The history file is also truncated to this size after
|
|
writing it when a shell exits or by the <code class="code">history</code> builtin.
|
|
If the value is 0, the history file is truncated to zero size.
|
|
Non-numeric values and numeric values less than zero inhibit truncation.
|
|
The shell sets the default value to the value of <code class="env">HISTSIZE</code>
|
|
after reading any startup files.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HISTIGNORE"></a><span><code class="code">HISTIGNORE</code><a class="copiable-link" href="#index-HISTIGNORE"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of patterns used to decide which command
|
|
lines should be saved on the history list.
|
|
If a command line matches one of the patterns in the value of
|
|
<code class="code">HISTIGNORE</code>,
|
|
it is not saved on the history list.
|
|
Each pattern is anchored at the
|
|
beginning of the line and must match the complete line
|
|
(Bash does not implicitly append a
|
|
‘<samp class="samp">*</samp>’).
|
|
Each pattern is tested against the line
|
|
after the checks specified by
|
|
<code class="env">HISTCONTROL</code>
|
|
are applied.
|
|
In addition to the normal shell pattern matching characters,
|
|
‘<samp class="samp">&</samp>’
|
|
matches the previous history line.
|
|
A backslash escapes the
|
|
‘<samp class="samp">&</samp>’;
|
|
the backslash is removed before attempting a match.
|
|
If the first line of a multi-line compound command was saved,
|
|
the second and subsequent lines are not tested,
|
|
and are added to the history regardless of the value of
|
|
<code class="env">HISTIGNORE</code>.
|
|
If the first line was not saved, the second and subsequent lines of
|
|
the command are not saved either.
|
|
The pattern matching honors the setting of the <code class="code">extglob</code> shell
|
|
option.
|
|
</p>
|
|
<p><code class="env">HISTIGNORE</code> subsumes some of the function of <code class="env">HISTCONTROL</code>.
|
|
A pattern of ‘<samp class="samp">&</samp>’ is identical to <code class="code">ignoredups</code>, and a
|
|
pattern of ‘<samp class="samp">[ ]*</samp>’ is identical to <code class="code">ignorespace</code>.
|
|
Combining these two patterns, separating them with a colon,
|
|
provides the functionality of <code class="code">ignoreboth</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HISTSIZE"></a><span><code class="code">HISTSIZE</code><a class="copiable-link" href="#index-HISTSIZE"> ¶</a></span></dt>
|
|
<dd><p>The maximum number of commands to remember on the history list.
|
|
If the value is 0, commands are not saved in the history list.
|
|
Numeric values less than zero result in every command being saved
|
|
on the history list (there is no limit).
|
|
The shell sets the default value to 500 after reading any startup files.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HISTTIMEFORMAT"></a><span><code class="code">HISTTIMEFORMAT</code><a class="copiable-link" href="#index-HISTTIMEFORMAT"> ¶</a></span></dt>
|
|
<dd><p>If this variable is set and not null, its value is used as a format string
|
|
for <code class="code">strftime</code>(3) to print the time stamp associated with each history
|
|
entry displayed by the <code class="code">history</code> builtin.
|
|
If this variable is set, the shell writes time stamps to the history file so
|
|
they may be preserved across shell sessions.
|
|
This uses the history comment character to distinguish timestamps from
|
|
other history lines.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HOSTFILE"></a><span><code class="code">HOSTFILE</code><a class="copiable-link" href="#index-HOSTFILE"> ¶</a></span></dt>
|
|
<dd><p>Contains the name of a file in the same format as <samp class="file">/etc/hosts</samp> that
|
|
should be read when the shell needs to complete a hostname.
|
|
The list of possible hostname completions may be changed while the shell
|
|
is running;
|
|
the next time hostname completion is attempted after the
|
|
value is changed, Bash adds the contents of the new file to the
|
|
existing list.
|
|
If <code class="env">HOSTFILE</code>
|
|
is set, but has no value, or does not name a readable file,
|
|
Bash attempts to read
|
|
<samp class="file">/etc/hosts</samp>
|
|
to obtain the list of possible hostname completions.
|
|
When <code class="env">HOSTFILE</code> is unset,
|
|
Bash clears the hostname list.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HOSTNAME"></a><span><code class="code">HOSTNAME</code><a class="copiable-link" href="#index-HOSTNAME"> ¶</a></span></dt>
|
|
<dd><p>The name of the current host.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-HOSTTYPE"></a><span><code class="code">HOSTTYPE</code><a class="copiable-link" href="#index-HOSTTYPE"> ¶</a></span></dt>
|
|
<dd><p>A string describing the machine Bash is running on.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-IGNOREEOF"></a><span><code class="code">IGNOREEOF</code><a class="copiable-link" href="#index-IGNOREEOF"> ¶</a></span></dt>
|
|
<dd><p>Controls the action of the shell on receipt of an <code class="code">EOF</code> character
|
|
as the sole input.
|
|
If set, the value is the number
|
|
of consecutive <code class="code">EOF</code> characters that can be read as the
|
|
first character on an input line before Bash exits.
|
|
If the variable is set but does not have a numeric value,
|
|
or the value is null, then the default is 10.
|
|
If the variable is unset, then <code class="code">EOF</code> signifies the end of
|
|
input to the shell.
|
|
This is only in effect for interactive shells.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-INPUTRC"></a><span><code class="code">INPUTRC</code><a class="copiable-link" href="#index-INPUTRC"> ¶</a></span></dt>
|
|
<dd><p>The name of the Readline initialization file, overriding the default
|
|
of <samp class="file">~/.inputrc</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-INSIDE_005fEMACS"></a><span><code class="code">INSIDE_EMACS</code><a class="copiable-link" href="#index-INSIDE_005fEMACS"> ¶</a></span></dt>
|
|
<dd><p>If Bash finds this variable in the environment when the shell
|
|
starts, it assumes that the shell is running in an Emacs shell buffer
|
|
and may disable line editing depending on the value of <code class="env">TERM</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LANG-1"></a><span><code class="code">LANG</code><a class="copiable-link" href="#index-LANG-1"> ¶</a></span></dt>
|
|
<dd><p>Used to determine the locale category for any category not specifically
|
|
selected with a variable starting with <code class="code">LC_</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LC_005fALL"></a><span><code class="code">LC_ALL</code><a class="copiable-link" href="#index-LC_005fALL"> ¶</a></span></dt>
|
|
<dd><p>This variable overrides the value of <code class="env">LANG</code> and any other
|
|
<code class="code">LC_</code> variable specifying a locale category.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LC_005fCOLLATE"></a><span><code class="code">LC_COLLATE</code><a class="copiable-link" href="#index-LC_005fCOLLATE"> ¶</a></span></dt>
|
|
<dd><p>This variable determines the collation order used when sorting the
|
|
results of filename expansion, and
|
|
determines the behavior of range expressions, equivalence classes,
|
|
and collating sequences within filename expansion and pattern matching
|
|
(see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LC_005fCTYPE"></a><span><code class="code">LC_CTYPE</code><a class="copiable-link" href="#index-LC_005fCTYPE"> ¶</a></span></dt>
|
|
<dd><p>This variable determines the interpretation of characters and the
|
|
behavior of character classes within filename expansion and pattern
|
|
matching (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LC_005fMESSAGES-1"></a><span><code class="code">LC_MESSAGES</code><a class="copiable-link" href="#index-LC_005fMESSAGES-1"> ¶</a></span></dt>
|
|
<dd><p>This variable determines the locale used to translate double-quoted
|
|
strings preceded by a ‘<samp class="samp">$</samp>’ (see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LC_005fNUMERIC"></a><span><code class="code">LC_NUMERIC</code><a class="copiable-link" href="#index-LC_005fNUMERIC"> ¶</a></span></dt>
|
|
<dd><p>This variable determines the locale category used for number formatting.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LC_005fTIME"></a><span><code class="code">LC_TIME</code><a class="copiable-link" href="#index-LC_005fTIME"> ¶</a></span></dt>
|
|
<dd><p>This variable determines the locale category used for data and time
|
|
formatting.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LINENO"></a><span><code class="code">LINENO</code><a class="copiable-link" href="#index-LINENO"> ¶</a></span></dt>
|
|
<dd><p>The line number in the script or shell function currently executing.
|
|
Line numbers start with 1.
|
|
When not in a script or function, the value is not
|
|
guaranteed to be meaningful.
|
|
If <code class="env">LINENO</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-LINES"></a><span><code class="code">LINES</code><a class="copiable-link" href="#index-LINES"> ¶</a></span></dt>
|
|
<dd><p>Used by the <code class="code">select</code> command to determine the column length
|
|
for printing selection lists.
|
|
Automatically set if the <code class="code">checkwinsize</code> option is enabled
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a
|
|
<code class="code">SIGWINCH</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-MACHTYPE"></a><span><code class="code">MACHTYPE</code><a class="copiable-link" href="#index-MACHTYPE"> ¶</a></span></dt>
|
|
<dd><p>A string that fully describes the system type on which Bash
|
|
is executing, in the standard <small class="sc">GNU</small> <var class="var">cpu-company-system</var> format.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-MAILCHECK"></a><span><code class="code">MAILCHECK</code><a class="copiable-link" href="#index-MAILCHECK"> ¶</a></span></dt>
|
|
<dd><p>How often (in seconds) that the shell should check for mail in the
|
|
files specified in the <code class="env">MAILPATH</code> or <code class="env">MAIL</code> variables.
|
|
The default is 60 seconds. When it is time to check
|
|
for mail, the shell does so before displaying the primary prompt.
|
|
If this variable is unset, or set to a value that is not a number
|
|
greater than or equal to zero, the shell disables mail checking.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-MAPFILE"></a><span><code class="code">MAPFILE</code><a class="copiable-link" href="#index-MAPFILE"> ¶</a></span></dt>
|
|
<dd><p>An array variable created to hold the text read by the
|
|
<code class="code">mapfile</code> builtin when no variable name is supplied.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-OLDPWD"></a><span><code class="code">OLDPWD</code><a class="copiable-link" href="#index-OLDPWD"> ¶</a></span></dt>
|
|
<dd><p>The previous working directory as set by the <code class="code">cd</code> builtin.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-OPTERR"></a><span><code class="code">OPTERR</code><a class="copiable-link" href="#index-OPTERR"> ¶</a></span></dt>
|
|
<dd><p>If set to the value 1, Bash displays error messages
|
|
generated by the <code class="code">getopts</code> builtin command.
|
|
<code class="env">OPTERR</code>
|
|
is initialized to 1 each time the shell is invoked.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-OSTYPE"></a><span><code class="code">OSTYPE</code><a class="copiable-link" href="#index-OSTYPE"> ¶</a></span></dt>
|
|
<dd><p>A string describing the operating system Bash is running on.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PIPESTATUS"></a><span><code class="code">PIPESTATUS</code><a class="copiable-link" href="#index-PIPESTATUS"> ¶</a></span></dt>
|
|
<dd><p>An array variable (see <a class="pxref" href="#Arrays">Arrays</a>)
|
|
containing a list of exit status values from the commands
|
|
in the most-recently-executed foreground pipeline, which may
|
|
consist of only a simple command
|
|
(see <a class="pxref" href="#Shell-Commands">Shell Commands</a>).
|
|
Bash sets
|
|
<code class="code">PIPESTATUS</code>
|
|
after executing multi-element pipelines,
|
|
timed and negated pipelines,
|
|
simple commands,
|
|
subshells created with the ‘<samp class="samp">(</samp>’ operator,
|
|
the
|
|
<code class="code">[[</code>
|
|
and
|
|
<code class="code">((</code>
|
|
compound commands, and
|
|
after error conditions that result in the
|
|
shell aborting command execution.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-POSIXLY_005fCORRECT"></a><span><code class="code">POSIXLY_CORRECT</code><a class="copiable-link" href="#index-POSIXLY_005fCORRECT"> ¶</a></span></dt>
|
|
<dd><p>If this variable is in the environment when Bash starts, the shell
|
|
enters <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>) before reading the
|
|
startup files, as if the <samp class="option">--posix</samp> invocation option had been supplied.
|
|
If it is set while the shell is running, Bash enables <small class="sc">POSIX</small> mode,
|
|
as if the command
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><code class="code">set -o posix</code>
|
|
</pre></div>
|
|
<p>had been executed.
|
|
When the shell enters <small class="sc">POSIX</small> mode, it sets this variable if it was
|
|
not already set.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PPID"></a><span><code class="code">PPID</code><a class="copiable-link" href="#index-PPID"> ¶</a></span></dt>
|
|
<dd><p>The process <small class="sc">ID</small> of the shell’s parent process.
|
|
This variable is readonly.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PROMPT_005fCOMMAND"></a><span><code class="code">PROMPT_COMMAND</code><a class="copiable-link" href="#index-PROMPT_005fCOMMAND"> ¶</a></span></dt>
|
|
<dd><p>If this variable is set, and is an array,
|
|
the value of each set element is interpreted as a command to execute
|
|
before printing the primary prompt (<code class="env">$PS1</code>).
|
|
If this is set but not an array variable,
|
|
its value is used as a command to execute instead.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PROMPT_005fDIRTRIM"></a><span><code class="code">PROMPT_DIRTRIM</code><a class="copiable-link" href="#index-PROMPT_005fDIRTRIM"> ¶</a></span></dt>
|
|
<dd><p>If set to a number greater than zero, the value is used as the number of
|
|
trailing directory components to retain when expanding the <code class="code">\w</code> and
|
|
<code class="code">\W</code> prompt string escapes (see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>).
|
|
Characters removed are replaced with an ellipsis.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PS0"></a><span><code class="code">PS0</code><a class="copiable-link" href="#index-PS0"> ¶</a></span></dt>
|
|
<dd><p>The value of this parameter is expanded like <code class="env">PS1</code>
|
|
and displayed by interactive shells after reading a command
|
|
and before the command is executed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PS3"></a><span><code class="code">PS3</code><a class="copiable-link" href="#index-PS3"> ¶</a></span></dt>
|
|
<dd><p>The value of this variable is used as the prompt for the
|
|
<code class="code">select</code> command. If this variable is not set, the
|
|
<code class="code">select</code> command prompts with ‘<samp class="samp">#? </samp>’
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PS4"></a><span><code class="code">PS4</code><a class="copiable-link" href="#index-PS4"> ¶</a></span></dt>
|
|
<dd><p>The value of this parameter is expanded like <code class="env">PS1</code>
|
|
and the expanded value is the prompt printed before the command line
|
|
is echoed when the <samp class="option">-x</samp> option is set (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
The first character of the expanded value is replicated multiple times,
|
|
as necessary, to indicate multiple levels of indirection.
|
|
The default is ‘<samp class="samp">+ </samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-PWD"></a><span><code class="code">PWD</code><a class="copiable-link" href="#index-PWD"> ¶</a></span></dt>
|
|
<dd><p>The current working directory as set by the <code class="code">cd</code> builtin.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-RANDOM"></a><span><code class="code">RANDOM</code><a class="copiable-link" href="#index-RANDOM"> ¶</a></span></dt>
|
|
<dd><p>Each time this parameter is referenced, it expands to a random integer
|
|
between 0 and 32767.
|
|
Assigning a value to
|
|
<code class="env">RANDOM</code>
|
|
initializes (seeds) the sequence of random numbers.
|
|
Seeding the random number generator with the same constant value
|
|
produces the same sequence of values.
|
|
If <code class="env">RANDOM</code>
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-READLINE_005fARGUMENT"></a><span><code class="code">READLINE_ARGUMENT</code><a class="copiable-link" href="#index-READLINE_005fARGUMENT"> ¶</a></span></dt>
|
|
<dd><p>Any numeric argument given to a Readline
|
|
command that was defined using
|
|
‘<samp class="samp">bind -x</samp>’ (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>)
|
|
when it was invoked.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-READLINE_005fLINE"></a><span><code class="code">READLINE_LINE</code><a class="copiable-link" href="#index-READLINE_005fLINE"> ¶</a></span></dt>
|
|
<dd><p>The contents of the Readline
|
|
line buffer, for use with
|
|
‘<samp class="samp">bind -x</samp>’ (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-READLINE_005fMARK"></a><span><code class="code">READLINE_MARK</code><a class="copiable-link" href="#index-READLINE_005fMARK"> ¶</a></span></dt>
|
|
<dd><p>The position of the <em class="dfn">mark</em> (saved insertion point) in the Readline
|
|
line buffer, for use
|
|
with ‘<samp class="samp">bind -x</samp>’ (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
The characters between the insertion point and the mark are often
|
|
called the <em class="dfn">region</em>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-READLINE_005fPOINT"></a><span><code class="code">READLINE_POINT</code><a class="copiable-link" href="#index-READLINE_005fPOINT"> ¶</a></span></dt>
|
|
<dd><p>The position of the insertion point in the Readline
|
|
line buffer, for use with
|
|
‘<samp class="samp">bind -x</samp>’ (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-REPLY"></a><span><code class="code">REPLY</code><a class="copiable-link" href="#index-REPLY"> ¶</a></span></dt>
|
|
<dd><p>The default variable for the <code class="code">read</code> builtin;
|
|
set to the line read when <code class="code">read</code> is not supplied a variable name
|
|
argument.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-SECONDS"></a><span><code class="code">SECONDS</code><a class="copiable-link" href="#index-SECONDS"> ¶</a></span></dt>
|
|
<dd><p>This variable expands to the number of seconds since the shell was started.
|
|
Assignment to this variable resets the count to the value assigned, and the
|
|
expanded value becomes the value assigned plus the number of seconds
|
|
since the assignment.
|
|
The number of seconds at shell invocation and the current time are always
|
|
determined by querying the system clock at one-second resolution.
|
|
If <code class="env">SECONDS</code>
|
|
is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-SHELL"></a><span><code class="code">SHELL</code><a class="copiable-link" href="#index-SHELL"> ¶</a></span></dt>
|
|
<dd><p>This environment variable expands to the full pathname to the shell.
|
|
If it is not set when the shell starts,
|
|
Bash assigns to it the full pathname of the current user’s login shell.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-SHELLOPTS"></a><span><code class="code">SHELLOPTS</code><a class="copiable-link" href="#index-SHELLOPTS"> ¶</a></span></dt>
|
|
<dd><p>A colon-separated list of enabled shell options.
|
|
Each word in the list is a valid argument for the <samp class="option">-o</samp> option
|
|
to the <code class="code">set</code> builtin command (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
The options appearing in <code class="env">SHELLOPTS</code> are those reported
|
|
as ‘<samp class="samp">on</samp>’ by ‘<samp class="samp">set -o</samp>’.
|
|
If this variable is in the environment when Bash
|
|
starts up, the shell enables each option in the list before
|
|
reading any startup files.
|
|
If this variable is exported, child shells will enable each option
|
|
in the list.
|
|
This variable is readonly.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-SHLVL"></a><span><code class="code">SHLVL</code><a class="copiable-link" href="#index-SHLVL"> ¶</a></span></dt>
|
|
<dd><p>Incremented by one each time a new instance of Bash is started.
|
|
This is intended to be a count of how deeply your Bash shells are nested.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-SRANDOM"></a><span><code class="code">SRANDOM</code><a class="copiable-link" href="#index-SRANDOM"> ¶</a></span></dt>
|
|
<dd><p>This variable expands to a 32-bit pseudo-random number each time it is
|
|
referenced.
|
|
The random number generator is not linear on systems that
|
|
support <samp class="file">/dev/urandom</samp> or <code class="code">arc4random</code>, so each returned number
|
|
has no relationship to the numbers preceding it.
|
|
The random number generator cannot be seeded, so assignments to this
|
|
variable have no effect.
|
|
If <code class="env">SRANDOM</code>
|
|
is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-TIMEFORMAT"></a><span><code class="code">TIMEFORMAT</code><a class="copiable-link" href="#index-TIMEFORMAT"> ¶</a></span></dt>
|
|
<dd><p>The value of this parameter is used as a format string specifying
|
|
how the timing information for pipelines prefixed with the <code class="code">time</code>
|
|
reserved word should be displayed.
|
|
The ‘<samp class="samp">%</samp>’ character introduces an
|
|
escape sequence that is expanded to a time value or other
|
|
information.
|
|
The escape sequences and their meanings are as
|
|
follows; the brackets denote optional portions.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">%%</code></dt>
|
|
<dd><p>A literal ‘<samp class="samp">%</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">%[<var class="var">p</var>][l]R</code></dt>
|
|
<dd><p>The elapsed time in seconds.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">%[<var class="var">p</var>][l]U</code></dt>
|
|
<dd><p>The number of CPU seconds spent in user mode.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">%[<var class="var">p</var>][l]S</code></dt>
|
|
<dd><p>The number of CPU seconds spent in system mode.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">%P</code></dt>
|
|
<dd><p>The CPU percentage, computed as (%U + %S) / %R.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The optional <var class="var">p</var> is a digit specifying the precision, the number of
|
|
fractional digits after a decimal point.
|
|
A value of 0 causes no decimal point or fraction to be output.
|
|
<code class="code">time</code> prints at most six digits after the decimal point;
|
|
values of <var class="var">p</var> greater than 6 are changed to 6.
|
|
If <var class="var">p</var> is not specified,
|
|
<code class="code">time</code> prints three digits after the decimal point.
|
|
</p>
|
|
<p>The optional <code class="code">l</code> specifies a longer format, including minutes, of
|
|
the form <var class="var">MM</var>m<var class="var">SS</var>.<var class="var">FF</var>s.
|
|
The value of <var class="var">p</var> determines whether or not the fraction is included.
|
|
</p>
|
|
<p>If this variable is not set, Bash acts as if it had the value
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><code class="code">$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'</code>
|
|
</pre></div>
|
|
<p>If the value is null, Bash does not display any timing information.
|
|
A trailing newline is added when the format string is displayed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-TMOUT"></a><span><code class="code">TMOUT</code><a class="copiable-link" href="#index-TMOUT"> ¶</a></span></dt>
|
|
<dd><p>If set to a value greater than zero, the <code class="code">read</code> builtin uses the
|
|
value as its
|
|
default timeout (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
The <code class="code">select</code> command (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>) terminates
|
|
if input does not arrive after <code class="code">TMOUT</code> seconds when input is coming
|
|
from a terminal.
|
|
</p>
|
|
<p>In an interactive shell, the value is interpreted as
|
|
the number of seconds to wait for a line of input after issuing
|
|
the primary prompt.
|
|
Bash terminates after waiting for that number of seconds if a
|
|
complete line of input does not arrive.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-TMPDIR"></a><span><code class="code">TMPDIR</code><a class="copiable-link" href="#index-TMPDIR"> ¶</a></span></dt>
|
|
<dd><p>If set, Bash uses its value as the name of a directory in which
|
|
Bash creates temporary files for the shell’s use.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-UID"></a><span><code class="code">UID</code><a class="copiable-link" href="#index-UID"> ¶</a></span></dt>
|
|
<dd><p>The numeric real user id of the current user. This variable is readonly.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Bash-Features">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Job-Control" accesskey="n" rel="next">Job Control</a>, Previous: <a href="#Shell-Variables" accesskey="p" rel="prev">Shell Variables</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Bash-Features-2"><span>6 Bash Features<a class="copiable-link" href="#Bash-Features-2"> ¶</a></span></h2>
|
|
|
|
<p>This chapter describes features unique to Bash.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Invoking-Bash" accesskey="1">Invoking Bash</a></li>
|
|
<li><a href="#Bash-Startup-Files" accesskey="2">Bash Startup Files</a></li>
|
|
<li><a href="#Interactive-Shells" accesskey="3">Interactive Shells</a></li>
|
|
<li><a href="#Bash-Conditional-Expressions" accesskey="4">Bash Conditional Expressions</a></li>
|
|
<li><a href="#Shell-Arithmetic" accesskey="5">Shell Arithmetic</a></li>
|
|
<li><a href="#Aliases" accesskey="6">Aliases</a></li>
|
|
<li><a href="#Arrays" accesskey="7">Arrays</a></li>
|
|
<li><a href="#The-Directory-Stack" accesskey="8">The Directory Stack</a></li>
|
|
<li><a href="#Controlling-the-Prompt" accesskey="9">Controlling the Prompt</a></li>
|
|
<li><a href="#The-Restricted-Shell">The Restricted Shell</a></li>
|
|
<li><a href="#Bash-POSIX-Mode">Bash and POSIX</a></li>
|
|
<li><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Invoking-Bash">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bash-Startup-Files" accesskey="n" rel="next">Bash Startup Files</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Invoking-Bash-1"><span>6.1 Invoking Bash<a class="copiable-link" href="#Invoking-Bash-1"> ¶</a></span></h3>
|
|
|
|
<div class="example">
|
|
<pre class="example-preformatted">bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o <var class="var">option</var>]
|
|
[-O <var class="var">shopt_option</var>] [<var class="var">argument</var> ...]
|
|
bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o <var class="var">option</var>]
|
|
[-O <var class="var">shopt_option</var>] -c <var class="var">string</var> [<var class="var">argument</var> ...]
|
|
bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o <var class="var">option</var>]
|
|
[-O <var class="var">shopt_option</var>] [<var class="var">argument</var> ...]
|
|
</pre></div>
|
|
|
|
<p>All of the single-character options used with the <code class="code">set</code> builtin
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>) can be used as options when the shell is invoked.
|
|
In addition, there are several multi-character
|
|
options that you can use.
|
|
These options must appear on the command
|
|
line before the single-character options to be recognized.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">--debugger</code></dt>
|
|
<dd><p>Arrange for the debugger profile to be executed before the shell starts.
|
|
Turns on extended debugging mode (see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>
|
|
for a description of the <code class="code">extdebug</code> option to the <code class="code">shopt</code>
|
|
builtin).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--dump-po-strings</code></dt>
|
|
<dd><p>Print a list of all double-quoted strings preceded by ‘<samp class="samp">$</samp>’
|
|
on the standard output
|
|
in the <small class="sc">GNU</small> <code class="code">gettext</code> PO (portable object) file format.
|
|
Equivalent to <samp class="option">-D</samp> except for the output format.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--dump-strings</code></dt>
|
|
<dd><p>Equivalent to <samp class="option">-D</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--help</code></dt>
|
|
<dd><p>Display a usage message on standard output and exit successfully.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--init-file <var class="var">filename</var></code></dt>
|
|
<dt><code class="code">--rcfile <var class="var">filename</var></code></dt>
|
|
<dd><p>Execute commands from <var class="var">filename</var> (instead of <samp class="file">~/.bashrc</samp>)
|
|
in an interactive shell.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--login</code></dt>
|
|
<dd><p>Equivalent to <samp class="option">-l</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--noediting</code></dt>
|
|
<dd><p>Do not use the <small class="sc">GNU</small> Readline library (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>)
|
|
to read command lines when the shell is interactive.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--noprofile</code></dt>
|
|
<dd><p>Don’t load the system-wide startup file <samp class="file">/etc/profile</samp>
|
|
or any of the personal initialization files
|
|
<samp class="file">~/.bash_profile</samp>, <samp class="file">~/.bash_login</samp>, or <samp class="file">~/.profile</samp>
|
|
when Bash is invoked as a login shell.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--norc</code></dt>
|
|
<dd><p>Don’t read the <samp class="file">~/.bashrc</samp> initialization file in an
|
|
interactive shell.
|
|
This is on by default if the shell is invoked as <code class="code">sh</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--posix</code></dt>
|
|
<dd><p>Enable <small class="sc">POSIX</small> mode;
|
|
change the behavior of Bash
|
|
where the default operation differs from the
|
|
<small class="sc">POSIX</small>
|
|
standard to match the standard.
|
|
This is intended to make Bash behave as a strict superset of that
|
|
standard.
|
|
See <a class="xref" href="#Bash-POSIX-Mode">Bash and POSIX</a>, for a description of the Bash <small class="sc">POSIX</small> mode.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--restricted</code></dt>
|
|
<dd><p>Equivalent to <samp class="option">-r</samp>.
|
|
Make the shell a restricted shell (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--verbose</code></dt>
|
|
<dd><p>Equivalent to <samp class="option">-v</samp>.
|
|
Print shell input lines as they’re read.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--version</code></dt>
|
|
<dd><p>Show version information for this instance of
|
|
Bash on the standard output and exit successfully.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>There are several single-character options that may be supplied at
|
|
invocation which are not available with the <code class="code">set</code> builtin.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-c</code></dt>
|
|
<dd><p>Read and execute commands from the first non-option argument
|
|
<var class="var">command_string</var>, then exit.
|
|
If there are arguments after the <var class="var">command_string</var>,
|
|
the first argument is assigned to <code class="code">$0</code>
|
|
and any remaining arguments are assigned to the positional parameters.
|
|
The assignment to <code class="code">$0</code> sets the name of the shell, which is used
|
|
in warning and error messages.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-i</code></dt>
|
|
<dd><p>Force the shell to run interactively.
|
|
Interactive shells are described in <a class="ref" href="#Interactive-Shells">Interactive Shells</a>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-l</code></dt>
|
|
<dd><p>Make this shell act as if it had been directly invoked by login.
|
|
When the shell is interactive, this is equivalent to starting a
|
|
login shell with ‘<samp class="samp">exec -l bash</samp>’.
|
|
When the shell is not interactive, it will read and execute the login
|
|
shell startup files.
|
|
‘<samp class="samp">exec bash -l</samp>’ or ‘<samp class="samp">exec bash --login</samp>’
|
|
will replace the current shell with a Bash login shell.
|
|
See <a class="xref" href="#Bash-Startup-Files">Bash Startup Files</a>, for a description of the special behavior
|
|
of a login shell.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r</code></dt>
|
|
<dd><p>Make the shell a restricted shell (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>If this option is present, or if no arguments remain after option
|
|
processing, then Bash reads commands from the standard input.
|
|
This option allows the positional parameters to be set
|
|
when invoking an interactive shell or when reading input
|
|
through a pipe.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-D</code></dt>
|
|
<dd><p>Print a list of all double-quoted strings preceded by ‘<samp class="samp">$</samp>’
|
|
on the standard output.
|
|
These are the strings that
|
|
are subject to language translation when the current locale
|
|
is not <code class="code">C</code> or <code class="code">POSIX</code> (see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>).
|
|
This implies the <samp class="option">-n</samp> option; no commands will be executed.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">[-+]O [<var class="var">shopt_option</var>]</code></dt>
|
|
<dd><p><var class="var">shopt_option</var> is one of the shell options accepted by the
|
|
<code class="code">shopt</code> builtin (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
If <var class="var">shopt_option</var> is present, <samp class="option">-O</samp> sets the value of that option;
|
|
<samp class="option">+O</samp> unsets it.
|
|
If <var class="var">shopt_option</var> is not supplied, Bash
|
|
prints the names and values of the shell
|
|
options accepted by <code class="code">shopt</code> on the standard output.
|
|
If the invocation option is <samp class="option">+O</samp>, the output is displayed in a format
|
|
that may be reused as input.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--</code></dt>
|
|
<dd><p>A <code class="code">--</code> signals the end of options and disables further option
|
|
processing.
|
|
Any arguments after the <code class="code">--</code>
|
|
are treated as a shell script filename (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>)
|
|
and arguments passed to that script.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-</code></dt>
|
|
<dd><p>Equivalent to <code class="code">--</code>.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<a class="index-entry-id" id="index-login-shell"></a>
|
|
<p>A <em class="dfn">login shell</em> is one whose first character of argument zero is
|
|
‘<samp class="samp">-</samp>’, or one invoked with the <samp class="option">--login</samp> option.
|
|
</p>
|
|
<a class="index-entry-id" id="index-interactive-shell"></a>
|
|
<p>An <em class="dfn">interactive shell</em> is one started without non-option arguments,
|
|
unless <samp class="option">-s</samp> is specified,
|
|
without specifying the <samp class="option">-c</samp> option,
|
|
and whose standard input and standard error are both
|
|
connected to terminals (as determined by
|
|
<i class="i">isatty(3)</i>),
|
|
or one started with the <samp class="option">-i</samp> option.
|
|
See <a class="xref" href="#Interactive-Shells">Interactive Shells</a>, for more information.
|
|
</p>
|
|
<p>If arguments remain after option processing, and neither the
|
|
<samp class="option">-c</samp> nor the <samp class="option">-s</samp>
|
|
option has been supplied, the first argument is treated as
|
|
the name of a file containing shell commands (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>).
|
|
When Bash is invoked in this fashion, <code class="code">$0</code>
|
|
is set to the name of the file, and the positional parameters
|
|
are set to the remaining arguments.
|
|
Bash reads and executes commands from this file, then exits.
|
|
Bash’s exit status is the exit status of the last command executed
|
|
in the script.
|
|
If no commands are executed, the exit status is 0.
|
|
Bash
|
|
first attempts to open the file in the current directory,
|
|
and, if no file is found, searches the directories in
|
|
<code class="env">PATH</code>
|
|
for the script.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Bash-Startup-Files">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Interactive-Shells" accesskey="n" rel="next">Interactive Shells</a>, Previous: <a href="#Invoking-Bash" accesskey="p" rel="prev">Invoking Bash</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bash-Startup-Files-1"><span>6.2 Bash Startup Files<a class="copiable-link" href="#Bash-Startup-Files-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-startup-files"></a>
|
|
|
|
<p>This section describes how Bash executes its startup files.
|
|
If any of the files exist but cannot be read, Bash reports an error.
|
|
Tildes are expanded in filenames as described above under
|
|
Tilde Expansion (see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>).
|
|
</p>
|
|
<p>Interactive shells are described in <a class="ref" href="#Interactive-Shells">Interactive Shells</a>.
|
|
</p>
|
|
<h4 class="subsubheading" id="Invoked-as-an-interactive-login-shell_002c-or-with-_002d_002dlogin"><span>Invoked as an interactive login shell, or with <samp class="option">--login</samp><a class="copiable-link" href="#Invoked-as-an-interactive-login-shell_002c-or-with-_002d_002dlogin"> ¶</a></span></h4>
|
|
|
|
<p>When Bash is invoked as an interactive login shell, or as a
|
|
non-interactive shell with the <samp class="option">--login</samp> option, it first reads and
|
|
executes commands from the file <samp class="file">/etc/profile</samp>, if that file exists.
|
|
After reading that file, it looks for <samp class="file">~/.bash_profile</samp>,
|
|
<samp class="file">~/.bash_login</samp>, and <samp class="file">~/.profile</samp>, in that order, and reads
|
|
and executes commands from the first one that exists and is readable.
|
|
The
|
|
<samp class="option">--noprofile</samp>
|
|
option inhibits this behavior.
|
|
</p>
|
|
<p>When an interactive login shell exits,
|
|
or a non-interactive login shell executes the <code class="code">exit</code> builtin command,
|
|
Bash reads and executes commands from
|
|
the file <samp class="file">~/.bash_logout</samp>, if it exists.
|
|
</p>
|
|
<h4 class="subsubheading" id="Invoked-as-an-interactive-non_002dlogin-shell"><span>Invoked as an interactive non-login shell<a class="copiable-link" href="#Invoked-as-an-interactive-non_002dlogin-shell"> ¶</a></span></h4>
|
|
|
|
<p>When Bash runs as an interactive shell that is not a login shell, it
|
|
reads and executes commands from <samp class="file">~/.bashrc</samp>, if that file exists.
|
|
The <samp class="option">--norc</samp> option inhibits this behavior.
|
|
The <samp class="option">--rcfile <var class="var">file</var></samp> option
|
|
causes Bash to
|
|
use <var class="var">file</var> instead of <samp class="file">~/.bashrc</samp>.
|
|
</p>
|
|
<p>So, typically, your <samp class="file">~/.bash_profile</samp> contains the line
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><code class="code">if [ -f ~/.bashrc ]; then . ~/.bashrc; fi</code>
|
|
</pre></div>
|
|
<p>after (or before) any login-specific initializations.
|
|
</p>
|
|
<h4 class="subsubheading" id="Invoked-non_002dinteractively"><span>Invoked non-interactively<a class="copiable-link" href="#Invoked-non_002dinteractively"> ¶</a></span></h4>
|
|
|
|
<p>When Bash is started non-interactively, to run a shell script,
|
|
for example, it looks for the variable <code class="env">BASH_ENV</code> in the environment,
|
|
expands its value if it appears there, and uses the expanded value as
|
|
the name of a file to read and execute.
|
|
Bash behaves as if the following command were executed:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><code class="code">if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi</code>
|
|
</pre></div>
|
|
<p>but does not the value of the <code class="env">PATH</code> variable to search for the
|
|
filename.
|
|
</p>
|
|
<p>As noted above, if a non-interactive shell is invoked with the
|
|
<samp class="option">--login</samp> option,
|
|
Bash attempts to read and execute commands from the
|
|
login shell startup files.
|
|
</p>
|
|
<h4 class="subsubheading" id="Invoked-with-name-sh"><span>Invoked with name <code class="code">sh</code><a class="copiable-link" href="#Invoked-with-name-sh"> ¶</a></span></h4>
|
|
|
|
<p>If Bash is invoked with the name <code class="command">sh</code>,
|
|
it tries to mimic the startup behavior of historical versions of
|
|
<code class="command">sh</code> as closely as possible,
|
|
while conforming to the
|
|
<small class="sc">POSIX</small>
|
|
standard as well.
|
|
</p>
|
|
<p>When invoked as an interactive login shell, or as a non-interactive
|
|
shell with the <samp class="option">--login</samp> option, it first attempts to read
|
|
and execute commands from
|
|
<samp class="file">/etc/profile</samp> and <samp class="file">~/.profile</samp>,
|
|
in that order.
|
|
The <samp class="option">--noprofile</samp> option inhibits this behavior.
|
|
</p>
|
|
<p>When invoked as an interactive shell with the name <code class="command">sh</code>, Bash
|
|
looks for the variable <code class="env">ENV</code>,
|
|
expands its value if it is defined, and uses the
|
|
expanded value as the name of a file to read and execute.
|
|
Since a shell invoked as <code class="command">sh</code>
|
|
does not attempt to read and execute commands from any other startup
|
|
files, the
|
|
<samp class="option">--rcfile</samp>
|
|
option has no effect.
|
|
</p>
|
|
<p>A non-interactive shell invoked with the name <code class="command">sh</code>
|
|
does not attempt to read any other startup files.
|
|
</p>
|
|
<p>When invoked as <code class="command">sh</code>, Bash enters <small class="sc">POSIX</small> mode after reading
|
|
the startup files.
|
|
</p>
|
|
<h4 class="subsubheading" id="Invoked-in-posix-mode"><span>Invoked in <small class="sc">POSIX</small> mode<a class="copiable-link" href="#Invoked-in-posix-mode"> ¶</a></span></h4>
|
|
|
|
<p>When Bash is started in <small class="sc">POSIX</small> mode, as with the
|
|
<samp class="option">--posix</samp> command line option, it follows the
|
|
<small class="sc">POSIX</small>
|
|
standard for startup files.
|
|
In this mode, interactive shells expand the <code class="env">ENV</code> variable
|
|
and read and execute commands from the file whose name is the
|
|
expanded value.
|
|
No other startup files are read.
|
|
</p>
|
|
<h4 class="subsubheading" id="Invoked-by-remote-shell-daemon"><span>Invoked by remote shell daemon<a class="copiable-link" href="#Invoked-by-remote-shell-daemon"> ¶</a></span></h4>
|
|
|
|
<p>Bash
|
|
attempts to determine when it is being run with its standard input
|
|
connected to a network connection, as when executed by
|
|
the historical and rarely-seen remote shell daemon, usually <code class="code">rshd</code>,
|
|
or the secure shell daemon <code class="code">sshd</code>.
|
|
If
|
|
Bash
|
|
determines it is being run non-interactively in this fashion,
|
|
it reads and executes commands from
|
|
<samp class="file">~/.bashrc</samp>,
|
|
if that file exists and is readable.
|
|
Bash does not read this file if invoked as <code class="code">sh</code>.
|
|
The
|
|
<samp class="option">--norc</samp>
|
|
option inhibits this behavior, and the
|
|
<samp class="option">--rcfile</samp>
|
|
option makes Bash use a different file instead of
|
|
<samp class="file">~/.bashrc</samp>,
|
|
but neither
|
|
<code class="code">rshd</code> nor <code class="code">sshd</code> generally invoke the shell with those
|
|
options or allow them to be specified.
|
|
</p>
|
|
<h4 class="subsubheading" id="Invoked-with-unequal-effective-and-real-uid_002fgids"><span>Invoked with unequal effective and real <small class="sc">UID/GID</small>s<a class="copiable-link" href="#Invoked-with-unequal-effective-and-real-uid_002fgids"> ¶</a></span></h4>
|
|
|
|
<p>If Bash is started with the effective user (group) id not equal to the
|
|
real user (group) id, and the <samp class="option">-p</samp> option is not supplied, no startup
|
|
files are read, shell functions are not inherited from the environment,
|
|
the <code class="env">SHELLOPTS</code>, <code class="env">BASHOPTS</code>, <code class="env">CDPATH</code>, and <code class="env">GLOBIGNORE</code>
|
|
variables, if they appear in the environment, are ignored, and the effective
|
|
user id is set to the real user id.
|
|
If the <samp class="option">-p</samp> option is supplied at invocation, the startup behavior is
|
|
the same, but the effective user id is not reset.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Interactive-Shells">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bash-Conditional-Expressions" accesskey="n" rel="next">Bash Conditional Expressions</a>, Previous: <a href="#Bash-Startup-Files" accesskey="p" rel="prev">Bash Startup Files</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Interactive-Shells-1"><span>6.3 Interactive Shells<a class="copiable-link" href="#Interactive-Shells-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-interactive-shell-1"></a>
|
|
<a class="index-entry-id" id="index-shell_002c-interactive"></a>
|
|
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#What-is-an-Interactive-Shell_003f" accesskey="1">What is an Interactive Shell?</a></li>
|
|
<li><a href="#Is-this-Shell-Interactive_003f" accesskey="2">Is this Shell Interactive?</a></li>
|
|
<li><a href="#Interactive-Shell-Behavior" accesskey="3">Interactive Shell Behavior</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="What-is-an-Interactive-Shell_003f">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Is-this-Shell-Interactive_003f" accesskey="n" rel="next">Is this Shell Interactive?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="What-is-an-Interactive-Shell_003f-1"><span>6.3.1 What is an Interactive Shell?<a class="copiable-link" href="#What-is-an-Interactive-Shell_003f-1"> ¶</a></span></h4>
|
|
|
|
<p>An interactive shell
|
|
is one started without non-option arguments
|
|
(unless <samp class="option">-s</samp> is specified)
|
|
and without specifying the <samp class="option">-c</samp> option,
|
|
whose input and error output are both
|
|
connected to terminals (as determined by <code class="code">isatty(3)</code>),
|
|
or one started with the <samp class="option">-i</samp> option.
|
|
</p>
|
|
<p>An interactive shell generally reads from and writes to a user’s
|
|
terminal.
|
|
</p>
|
|
<p>The <samp class="option">-s</samp> invocation option may be used to set the positional parameters
|
|
when an interactive shell starts.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Is-this-Shell-Interactive_003f">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Interactive-Shell-Behavior" accesskey="n" rel="next">Interactive Shell Behavior</a>, Previous: <a href="#What-is-an-Interactive-Shell_003f" accesskey="p" rel="prev">What is an Interactive Shell?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Is-this-Shell-Interactive_003f-1"><span>6.3.2 Is this Shell Interactive?<a class="copiable-link" href="#Is-this-Shell-Interactive_003f-1"> ¶</a></span></h4>
|
|
|
|
<p>To determine within a startup script whether or not Bash is
|
|
running interactively,
|
|
test the value of the ‘<samp class="samp">-</samp>’ special parameter.
|
|
It contains <code class="code">i</code> when the shell is interactive.
|
|
For example:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">case "$-" in
|
|
*i*) echo This shell is interactive ;;
|
|
*) echo This shell is not interactive ;;
|
|
esac
|
|
</pre></div>
|
|
|
|
<p>Alternatively, startup scripts may examine the variable
|
|
<code class="env">PS1</code>; it is unset in non-interactive shells, and set in
|
|
interactive shells.
|
|
Thus:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">if [ -z "$PS1" ]; then
|
|
echo This shell is not interactive
|
|
else
|
|
echo This shell is interactive
|
|
fi
|
|
</pre></div>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Interactive-Shell-Behavior">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Is-this-Shell-Interactive_003f" accesskey="p" rel="prev">Is this Shell Interactive?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Interactive-Shell-Behavior-1"><span>6.3.3 Interactive Shell Behavior<a class="copiable-link" href="#Interactive-Shell-Behavior-1"> ¶</a></span></h4>
|
|
|
|
<p>When the shell is running interactively, it changes its behavior in
|
|
several ways.
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> Bash reads and executes startup files as described in <a class="ref" href="#Bash-Startup-Files">Bash Startup Files</a>.
|
|
|
|
</li><li> Job Control (see <a class="pxref" href="#Job-Control">Job Control</a>) is enabled by default.
|
|
When job control is in effect, Bash ignores the keyboard-generated
|
|
job control signals <code class="code">SIGTTIN</code>, <code class="code">SIGTTOU</code>, and <code class="code">SIGTSTP</code>.
|
|
|
|
</li><li> Bash executes the values of the set elements of the <code class="env">PROMPT_COMMAND</code>
|
|
array variable as commands before printing the primary prompt, <code class="env">$PS1</code>
|
|
(see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
</li><li> Bash expands and displays <code class="env">PS1</code> before reading the first line
|
|
of a command, and expands and displays <code class="env">PS2</code> before reading the
|
|
second and subsequent lines of a multi-line command.
|
|
Bash expands and displays <code class="env">PS0</code> after it reads a command but before
|
|
executing it.
|
|
See <a class="ref" href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt
|
|
string escape sequences.
|
|
|
|
</li><li> Bash uses Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) to read commands from
|
|
the user’s terminal.
|
|
|
|
</li><li> Bash inspects the value of the <code class="code">ignoreeof</code> option to <code class="code">set -o</code>
|
|
instead of exiting immediately when it receives an <code class="code">EOF</code> on its
|
|
standard input when reading a command (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
</li><li> Bash enables Command history (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>)
|
|
and history expansion (see <a class="pxref" href="#History-Interaction">History Expansion</a>)
|
|
by default.
|
|
When a shell with history enabled exits,
|
|
Bash saves the command history to the file named by <code class="env">$HISTFILE</code>.
|
|
|
|
</li><li> Alias expansion (see <a class="pxref" href="#Aliases">Aliases</a>) is performed by default.
|
|
|
|
</li><li> In the absence of any traps, Bash ignores <code class="code">SIGTERM</code>
|
|
(see <a class="pxref" href="#Signals">Signals</a>).
|
|
|
|
</li><li> In the absence of any traps, <code class="code">SIGINT</code> is caught and handled
|
|
(see <a class="pxref" href="#Signals">Signals</a>).
|
|
<code class="code">SIGINT</code> will interrupt some shell builtins.
|
|
|
|
</li><li> An interactive login shell sends a <code class="code">SIGHUP</code> to all jobs on exit
|
|
if the <code class="code">huponexit</code> shell option has been enabled (see <a class="pxref" href="#Signals">Signals</a>).
|
|
|
|
</li><li> The <samp class="option">-n</samp> option has no effect, whether at invocation or when
|
|
using ‘<samp class="samp">set -n</samp>’ (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
</li><li> Bash will check for mail periodically, depending on the values of the
|
|
<code class="env">MAIL</code>, <code class="env">MAILPATH</code>, and <code class="env">MAILCHECK</code> shell variables
|
|
(see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
</li><li> The shell will not exit on
|
|
expansion errors due to references to unbound shell variables after
|
|
‘<samp class="samp">set -u</samp>’ has been enabled (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
</li><li> The shell will not exit on
|
|
expansion errors caused by <var class="var">var</var> being unset or null in
|
|
<code class="code">${<var class="var">var</var>:?<var class="var">word</var>}</code> expansions
|
|
(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
</li><li> Redirection errors encountered by shell builtins will not cause the
|
|
shell to exit.
|
|
|
|
</li><li> When running in <small class="sc">POSIX</small> mode, a special builtin returning an error
|
|
status will not cause the shell to exit (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>).
|
|
|
|
</li><li> A failed <code class="code">exec</code> will not cause the shell to exit
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
</li><li> Parser syntax errors will not cause the shell to exit.
|
|
|
|
</li><li> If the <code class="code">cdspell</code> shell option is enabled, the shell will attempt
|
|
simple spelling correction for directory arguments to the <code class="code">cd</code>
|
|
builtin (see the description of the <code class="code">cdspell</code>
|
|
option to the <code class="code">shopt</code> builtin in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
The <code class="code">cdspell</code> option is only effective in interactive shells.
|
|
|
|
</li><li> The shell will check the value of the <code class="env">TMOUT</code> variable and exit
|
|
if a command is not read within the specified number of seconds after
|
|
printing <code class="env">$PS1</code> (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
</li></ol>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Bash-Conditional-Expressions">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Arithmetic" accesskey="n" rel="next">Shell Arithmetic</a>, Previous: <a href="#Interactive-Shells" accesskey="p" rel="prev">Interactive Shells</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bash-Conditional-Expressions-1"><span>6.4 Bash Conditional Expressions<a class="copiable-link" href="#Bash-Conditional-Expressions-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-expressions_002c-conditional"></a>
|
|
|
|
<p>Conditional expressions are used by the <code class="code">[[</code> compound command
|
|
(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>)
|
|
and the <code class="code">test</code> and <code class="code">[</code> builtin commands
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
The <code class="code">test</code>
|
|
and <code class="code">[</code> commands determine their behavior based on the number
|
|
of arguments; see the descriptions of those commands for any other
|
|
command-specific actions.
|
|
</p>
|
|
<p>Expressions may be unary or binary,
|
|
and are formed from the primaries listed below.
|
|
Unary expressions are often used to examine the status of a file
|
|
or shell variable.
|
|
Binary operators are used for string, numeric, and file attribute
|
|
comparisons.
|
|
</p>
|
|
<p>Bash handles several filenames specially when they are used in
|
|
expressions.
|
|
If the operating system on which Bash is running provides these
|
|
special files, Bash uses them; otherwise it emulates them
|
|
internally with this behavior:
|
|
If the <var class="var">file</var> argument to one of the primaries is of the form
|
|
<samp class="file">/dev/fd/<var class="var">N</var></samp>, then Bash checks file descriptor <var class="var">N</var>.
|
|
If the <var class="var">file</var> argument to one of the primaries is one of
|
|
<samp class="file">/dev/stdin</samp>, <samp class="file">/dev/stdout</samp>, or <samp class="file">/dev/stderr</samp>,
|
|
Bash checks file descriptor 0, 1, or 2, respectively.
|
|
</p>
|
|
<p>When used with <code class="code">[[</code>, the ‘<samp class="samp"><</samp>’ and ‘<samp class="samp">></samp>’ operators sort
|
|
lexicographically using the current locale.
|
|
The <code class="code">test</code> command uses ASCII ordering.
|
|
</p>
|
|
<p>Unless otherwise specified, primaries that operate on files follow symbolic
|
|
links and operate on the target of the link, rather than the link itself.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-a <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-b <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a block special file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-c <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a character special file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-d <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a directory.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-e <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-f <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a regular file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-g <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and its set-group-id bit is set.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-h <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a symbolic link.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-k <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and its "sticky" bit is set.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-p <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a named pipe (FIFO).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is readable.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-s <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and has a size greater than zero.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-t <var class="var">fd</var></code></dt>
|
|
<dd><p>True if file descriptor <var class="var">fd</var> is open and refers to a terminal.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-u <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and its set-user-id bit is set.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-w <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is writable.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-x <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is executable.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-G <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is owned by the effective group id.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-L <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a symbolic link.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-N <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and has been modified since it was last
|
|
accessed.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-O <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is owned by the effective user id.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-S <var class="var">file</var></code></dt>
|
|
<dd><p>True if <var class="var">file</var> exists and is a socket.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">file1</var> -ef <var class="var">file2</var></code></dt>
|
|
<dd><p>True if <var class="var">file1</var> and <var class="var">file2</var> refer to the same device and
|
|
inode numbers.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">file1</var> -nt <var class="var">file2</var></code></dt>
|
|
<dd><p>True if <var class="var">file1</var> is newer (according to modification date)
|
|
than <var class="var">file2</var>, or if <var class="var">file1</var> exists and <var class="var">file2</var> does not.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">file1</var> -ot <var class="var">file2</var></code></dt>
|
|
<dd><p>True if <var class="var">file1</var> is older than <var class="var">file2</var>,
|
|
or if <var class="var">file2</var> exists and <var class="var">file1</var> does not.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-o <var class="var">optname</var></code></dt>
|
|
<dd><p>True if the shell option <var class="var">optname</var> is enabled.
|
|
The list of options appears in the description of the <samp class="option">-o</samp>
|
|
option to the <code class="code">set</code> builtin (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-v <var class="var">varname</var></code></dt>
|
|
<dd><p>True if the shell variable <var class="var">varname</var> is set (has been assigned a value).
|
|
If <var class="var">varname</var> is an indexed
|
|
array variable name subscripted by ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
this returns true if the array has any set elements.
|
|
If <var class="var">varname</var> is an associative
|
|
array variable name subscripted by ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
this returns true if an element with that key is set.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-R <var class="var">varname</var></code></dt>
|
|
<dd><p>True if the shell variable <var class="var">varname</var> is set and is a name reference.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-z <var class="var">string</var></code></dt>
|
|
<dd><p>True if the length of <var class="var">string</var> is zero.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-n <var class="var">string</var></code></dt>
|
|
<dt><code class="code"><var class="var">string</var></code></dt>
|
|
<dd><p>True if the length of <var class="var">string</var> is non-zero.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">string1</var> == <var class="var">string2</var></code></dt>
|
|
<dt><code class="code"><var class="var">string1</var> = <var class="var">string2</var></code></dt>
|
|
<dd><p>True if the strings are equal.
|
|
When used with the <code class="code">[[</code> command, this performs pattern matching as
|
|
described above (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
</p>
|
|
<p>‘<samp class="samp">=</samp>’ should be used with the <code class="code">test</code> command for
|
|
<small class="sc">POSIX</small>
|
|
conformance.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">string1</var> != <var class="var">string2</var></code></dt>
|
|
<dd><p>True if the strings are not equal.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">string1</var> < <var class="var">string2</var></code></dt>
|
|
<dd><p>True if <var class="var">string1</var> sorts before <var class="var">string2</var> lexicographically.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">string1</var> > <var class="var">string2</var></code></dt>
|
|
<dd><p>True if <var class="var">string1</var> sorts after <var class="var">string2</var> lexicographically.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">arg1</var> OP <var class="var">arg2</var></code></dt>
|
|
<dd><p><code class="code">OP</code> is one of
|
|
‘<samp class="samp">-eq</samp>’, ‘<samp class="samp">-ne</samp>’, ‘<samp class="samp">-lt</samp>’, ‘<samp class="samp">-le</samp>’, ‘<samp class="samp">-gt</samp>’, or ‘<samp class="samp">-ge</samp>’.
|
|
These arithmetic binary operators return true if <var class="var">arg1</var>
|
|
is equal to, not equal to, less than, less than or equal to,
|
|
greater than, or greater than or equal to <var class="var">arg2</var>,
|
|
respectively. <var class="var">Arg1</var> and <var class="var">arg2</var>
|
|
may be positive or negative integers.
|
|
When used with the <code class="code">[[</code> command, <var class="var">arg1</var> and <var class="var">arg2</var>
|
|
are evaluated as arithmetic expressions (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
Since the expansions the <code class="code">[[</code> command performs on
|
|
<var class="var">arg1</var> and <var class="var">arg2</var>
|
|
can potentially result in empty strings,
|
|
arithmetic expression evaluation treats
|
|
those as expressions that evaluate to 0.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Shell-Arithmetic">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Aliases" accesskey="n" rel="next">Aliases</a>, Previous: <a href="#Bash-Conditional-Expressions" accesskey="p" rel="prev">Bash Conditional Expressions</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Arithmetic-1"><span>6.5 Shell Arithmetic<a class="copiable-link" href="#Shell-Arithmetic-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-arithmetic_002c-shell"></a>
|
|
<a class="index-entry-id" id="index-shell-arithmetic"></a>
|
|
<a class="index-entry-id" id="index-expressions_002c-arithmetic"></a>
|
|
<a class="index-entry-id" id="index-evaluation_002c-arithmetic"></a>
|
|
<a class="index-entry-id" id="index-arithmetic-evaluation"></a>
|
|
|
|
<p>The shell allows arithmetic expressions to be evaluated, as one of
|
|
the shell expansions or by using the <code class="code">((</code> compound command,
|
|
the <code class="code">let</code> and <code class="code">declare</code> builtins,
|
|
the arithmetic <code class="code">for</code> command,
|
|
the <code class="code">[[</code> conditional command,
|
|
or the <samp class="option">-i</samp> option to the <code class="code">declare</code> builtin.
|
|
</p>
|
|
<p>Evaluation is done in the largest fixed-width integers available,
|
|
with no check for overflow,
|
|
though division by 0 is trapped and flagged as an error.
|
|
The operators and their precedence, associativity, and values
|
|
are the same as in the C language.
|
|
The following list of operators is grouped into levels of
|
|
equal-precedence operators.
|
|
The levels are listed in order of decreasing precedence.
|
|
</p>
|
|
<dl class="table">
|
|
<dd><a class="index-entry-id" id="index-arithmetic-operators"></a>
|
|
<a class="index-entry-id" id="index-unary-arithmetic-operators"></a>
|
|
<a class="index-entry-id" id="index-binary-arithmetic-operators"></a>
|
|
<a class="index-entry-id" id="index-conditional-arithmetic-operator"></a>
|
|
<a class="index-entry-id" id="index-bitwise-arithmetic-operators"></a>
|
|
|
|
</dd>
|
|
<dt><code class="code"><var class="var">id</var>++ <var class="var">id</var>--</code></dt>
|
|
<dd><p>variable post-increment and post-decrement
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">++<var class="var">id</var> --<var class="var">id</var></code></dt>
|
|
<dd><p>variable pre-increment and pre-decrement
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">- +</code></dt>
|
|
<dd><p>unary minus and plus
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">! ~</code></dt>
|
|
<dd><p>logical and bitwise negation
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">**</code></dt>
|
|
<dd><p>exponentiation
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">* / %</code></dt>
|
|
<dd><p>multiplication, division, remainder
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">+ -</code></dt>
|
|
<dd><p>addition, subtraction
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><< >></code></dt>
|
|
<dd><p>left and right bitwise shifts
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><= >= < ></code></dt>
|
|
<dd><p>comparison
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">== !=</code></dt>
|
|
<dd><p>equality and inequality
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">&</code></dt>
|
|
<dd><p>bitwise AND
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">^</code></dt>
|
|
<dd><p>bitwise exclusive OR
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">|</code></dt>
|
|
<dd><p>bitwise OR
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">&&</code></dt>
|
|
<dd><p>logical AND
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">||</code></dt>
|
|
<dd><p>logical OR
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">expr ? if-true-expr : if-false-expr</code></dt>
|
|
<dd><p>conditional operator
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">= *= /= %= += -= <<= >>= &= ^= |=</code></dt>
|
|
<dd><p>assignment
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">expr1 , expr2</code></dt>
|
|
<dd><p>comma
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Shell variables are allowed as operands; parameter expansion is
|
|
performed before the expression is evaluated.
|
|
Within an expression, shell variables may also be referenced by name
|
|
without using the parameter expansion syntax.
|
|
This means you can use <var class="var">x</var>,
|
|
where <var class="var">x</var> is a shell variable name, in an arithmetic expression,
|
|
and the shell will evaluate its value as an expression and use the
|
|
result.
|
|
A shell variable that is null or unset evaluates to 0 when referenced
|
|
by name in an expression.
|
|
</p>
|
|
<p>The value of a variable is evaluated as an arithmetic expression
|
|
when it is referenced, or when a variable which has been given the
|
|
<code class="code">integer</code> attribute using ‘<samp class="samp">declare -i</samp>’ is assigned a value.
|
|
A null value evaluates to 0.
|
|
A shell variable need not have its <code class="code">integer</code> attribute enabled
|
|
to be used in an expression.
|
|
</p>
|
|
<p>Integer constants follow the C language definition, without suffixes or
|
|
character constants.
|
|
Constants with a leading 0 are interpreted as octal numbers.
|
|
A leading ‘<samp class="samp">0x</samp>’ or ‘<samp class="samp">0X</samp>’ denotes hexadecimal. Otherwise,
|
|
numbers take the form [<var class="var">base</var><code class="code">#</code>]<var class="var">n</var>, where the optional <var class="var">base</var>
|
|
is a decimal number between 2 and 64 representing the arithmetic
|
|
base, and <var class="var">n</var> is a number in that base.
|
|
If <var class="var">base</var><code class="code">#</code> is omitted, then base 10 is used.
|
|
When specifying <var class="var">n</var>,
|
|
if a non-digit is required,
|
|
the digits greater than 9 are represented by the lowercase letters,
|
|
the uppercase letters, ‘<samp class="samp">@</samp>’, and ‘<samp class="samp">_</samp>’, in that order.
|
|
If <var class="var">base</var> is less than or equal to 36, lowercase and uppercase
|
|
letters may be used interchangeably to represent numbers between 10
|
|
and 35.
|
|
</p>
|
|
<p>Operators are evaluated in precedence order.
|
|
Sub-expressions in parentheses are evaluated first
|
|
and may override the precedence rules above.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Aliases">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Arrays" accesskey="n" rel="next">Arrays</a>, Previous: <a href="#Shell-Arithmetic" accesskey="p" rel="prev">Shell Arithmetic</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Aliases-1"><span>6.6 Aliases<a class="copiable-link" href="#Aliases-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-alias-expansion"></a>
|
|
|
|
<p><em class="dfn">Aliases</em> allow a string to be substituted for a word that is in
|
|
a position in the input where it can be the first word of a simple
|
|
command.
|
|
Aliases have names and corresponding values that are set
|
|
and unset using the <code class="code">alias</code> and <code class="code">unalias</code> builtin commands
|
|
(see <a class="pxref" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>).
|
|
</p>
|
|
<p>If the shell reads an unquoted word in the right position, it checks
|
|
the word to see if it matches an alias name.
|
|
If it matches, the shell
|
|
replaces the word with the alias value, and reads that value as if it
|
|
had been read instead of the word.
|
|
The shell doesn’t look at any characters following the word before
|
|
attempting alias substitution.
|
|
</p>
|
|
<p>The characters ‘<samp class="samp">/</samp>’, ‘<samp class="samp">$</samp>’, ‘<samp class="samp">`</samp>’, ‘<samp class="samp">=</samp>’ and any of the
|
|
shell metacharacters or quoting characters listed above may not appear
|
|
in an alias name.
|
|
The replacement text may contain any valid
|
|
shell input, including shell metacharacters.
|
|
The first word of the replacement text is tested for
|
|
aliases, but a word that is identical to an alias being expanded
|
|
is not expanded a second time.
|
|
This means that one may alias <code class="code">ls</code> to <code class="code">"ls -F"</code>,
|
|
for instance, and Bash does not try to recursively expand the
|
|
replacement text.
|
|
</p>
|
|
<p>If the last character of the alias value is a
|
|
<code class="code">blank</code>, then the shell checks
|
|
the next command word following the alias for alias expansion.
|
|
</p>
|
|
<p>Aliases are created and listed with the <code class="code">alias</code>
|
|
command, and removed with the <code class="code">unalias</code> command.
|
|
</p>
|
|
<p>There is no mechanism for using arguments in the replacement text,
|
|
as in <code class="code">csh</code>.
|
|
If arguments are needed, use a shell function
|
|
(see <a class="pxref" href="#Shell-Functions">Shell Functions</a>) instead.
|
|
</p>
|
|
<p>Aliases are not expanded when the shell is not interactive,
|
|
unless the <code class="code">expand_aliases</code> shell option is set using
|
|
<code class="code">shopt</code> (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
</p>
|
|
<p>The rules concerning the definition and use of aliases are
|
|
somewhat confusing.
|
|
Bash always reads at least one complete line of input,
|
|
and all lines that make up a compound command,
|
|
before executing any of the commands on that line or the compound command.
|
|
Aliases are expanded when a command is read, not when it is executed.
|
|
Therefore, an
|
|
alias definition appearing on the same line as another
|
|
command does not take effect until the shell reads the next line of input,
|
|
and an alias definition in a compound command does not take
|
|
effect until the shell parses and executes the entire compound command.
|
|
The commands following the alias definition
|
|
on that line,
|
|
or in the rest of a compound command,
|
|
are not affected by the new alias.
|
|
This behavior is also an issue when functions are executed.
|
|
Aliases are expanded when a function definition is read,
|
|
not when the function is executed, because a function definition
|
|
is itself a command.
|
|
As a consequence, aliases
|
|
defined in a function are not available until after that
|
|
function is executed.
|
|
To be safe, always put
|
|
alias definitions on a separate line, and do not use <code class="code">alias</code>
|
|
in compound commands.
|
|
</p>
|
|
<p>For almost every purpose, shell functions are preferable to aliases.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Arrays">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#The-Directory-Stack" accesskey="n" rel="next">The Directory Stack</a>, Previous: <a href="#Aliases" accesskey="p" rel="prev">Aliases</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Arrays-1"><span>6.7 Arrays<a class="copiable-link" href="#Arrays-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-arrays"></a>
|
|
|
|
<p>Bash
|
|
provides one-dimensional indexed and associative array variables.
|
|
Any variable may be used as an indexed array; the
|
|
<code class="code">declare</code>
|
|
builtin explicitly declares an array.
|
|
There is no maximum
|
|
limit on the size of an array, nor any requirement that members
|
|
be indexed or assigned contiguously.
|
|
Indexed arrays are referenced using arithmetic expressions
|
|
that must expand to an integer (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>))
|
|
and are zero-based;
|
|
associative arrays use arbitrary strings.
|
|
Unless otherwise noted, indexed array indices must be non-negative integers.
|
|
</p>
|
|
<p>The shell performs
|
|
parameter and variable expansion, arithmetic expansion,
|
|
command substitution, and quote removal
|
|
on indexed array subscripts.
|
|
Since this
|
|
can potentially result in empty strings,
|
|
subscript indexing treats
|
|
those as expressions that evaluate to 0.
|
|
</p>
|
|
<p>The shell performs
|
|
tilde expansion,
|
|
parameter and variable expansion, arithmetic expansion,
|
|
command substitution, and quote removal
|
|
on associative array subscripts.
|
|
Empty strings cannot be used as associative array keys.
|
|
</p>
|
|
<p>Bash automatically creates an indexed array
|
|
if any variable is assigned to using the syntax
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><var class="var">name</var>[<var class="var">subscript</var>]=<var class="var">value</var>
|
|
</pre></div>
|
|
|
|
<p>The <var class="var">subscript</var>
|
|
is treated as an arithmetic expression that must evaluate to a number
|
|
greater than or equal to zero.
|
|
To explicitly declare an indexed array, use
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">declare -a <var class="var">name</var>
|
|
</pre></div>
|
|
<p>(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
The syntax
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">declare -a <var class="var">name</var>[<var class="var">subscript</var>]
|
|
</pre></div>
|
|
<p>is also accepted; the <var class="var">subscript</var> is ignored.
|
|
</p>
|
|
<p>Associative arrays are created using
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">declare -A <var class="var">name</var>
|
|
</pre></div>
|
|
|
|
<p>Attributes may be specified for an array variable using the
|
|
<code class="code">declare</code> and <code class="code">readonly</code> builtins.
|
|
Each attribute applies to all members of an array.
|
|
</p>
|
|
<p>Arrays are assigned using compound assignments of the form
|
|
</p><div class="example">
|
|
<pre class="example-preformatted"><var class="var">name</var>=(<var class="var">value1</var> <var class="var">value2</var> ... )
|
|
</pre></div>
|
|
<p>where each
|
|
<var class="var">value</var> may be of the form <code class="code">[<var class="var">subscript</var>]=</code><var class="var">string</var>.
|
|
Indexed array assignments do not require anything but <var class="var">string</var>.
|
|
</p>
|
|
<p>Each <var class="var">value</var> in the list undergoes the shell expansions
|
|
described above (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>),
|
|
but <var class="var">value</var>s that are valid variable assignments
|
|
including the brackets and subscript do not undergo
|
|
brace expansion and word splitting, as with individual
|
|
variable assignments.
|
|
</p>
|
|
<p>When assigning to indexed arrays, if
|
|
the optional subscript is supplied, that index is assigned to;
|
|
otherwise the index of the element assigned is the last index assigned
|
|
to by the statement plus one.
|
|
Indexing starts at zero.
|
|
</p>
|
|
<p>When assigning to an associative array, the words in a compound assignment
|
|
may be either assignment statements, for which the subscript is required,
|
|
or a list of words that is interpreted as a sequence of alternating keys
|
|
and values:
|
|
<var class="var">name</var>=(<var class="var">key1</var> <var class="var">value1</var> <var class="var">key2</var> <var class="var">value2</var> … ).
|
|
These are treated identically to
|
|
<var class="var">name</var>=( [<var class="var">key1</var>]=<var class="var">value1</var> [<var class="var">key2</var>]=<var class="var">value2</var> … ).
|
|
The first word in the list determines how the remaining words
|
|
are interpreted; all assignments in a list must be of the same type.
|
|
When using key/value pairs, the keys may not be missing or empty;
|
|
a final missing value is treated like the empty string.
|
|
</p>
|
|
<p>This syntax is also accepted by the <code class="code">declare</code>
|
|
builtin.
|
|
Individual array elements may be assigned to using the
|
|
<code class="code"><var class="var">name</var>[<var class="var">subscript</var>]=<var class="var">value</var></code> syntax introduced above.
|
|
</p>
|
|
<p>When assigning to an indexed array, if <var class="var">name</var>
|
|
is subscripted by a negative number, that number is
|
|
interpreted as relative to one greater than the maximum index of
|
|
<var class="var">name</var>, so negative indices count back from the end of the
|
|
array, and an index of -1 references the last element.
|
|
</p>
|
|
<p>The ‘<samp class="samp">+=</samp>’
|
|
operator appends to an array variable when assigning
|
|
using the compound assignment syntax; see
|
|
<a class="ref" href="#Shell-Parameters">Shell Parameters</a> above.
|
|
</p>
|
|
<p>An array element is referenced using
|
|
<code class="code">${<var class="var">name</var>[<var class="var">subscript</var>]}</code>.
|
|
The braces are required to avoid
|
|
conflicts with the shell’s filename expansion operators.
|
|
If the <var class="var">subscript</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the word expands to all members
|
|
of the array <var class="var">name</var>, unless otherwise noted in the description of a
|
|
builtin or word expansion.
|
|
These subscripts differ only when the word
|
|
appears within double quotes.
|
|
If the word is double-quoted,
|
|
<code class="code">${<var class="var">name</var>[*]}</code> expands to a single word with
|
|
the value of each array member separated by the first character of the
|
|
<code class="env">IFS</code> variable, and <code class="code">${<var class="var">name</var>[@]}</code> expands each element of
|
|
<var class="var">name</var> to a separate word.
|
|
When there are no array members, <code class="code">${<var class="var">name</var>[@]}</code> expands to
|
|
nothing.
|
|
If the double-quoted expansion occurs within a word,
|
|
the expansion of the first parameter is joined with the beginning part of the
|
|
expansion of the original word,
|
|
and the expansion of the last parameter is joined with the last part of the
|
|
expansion of the original word.
|
|
This is analogous to the
|
|
expansion of the special parameters ‘<samp class="samp">@</samp>’ and ‘<samp class="samp">*</samp>’.
|
|
</p>
|
|
<p><code class="code">${#<var class="var">name</var>[<var class="var">subscript</var>]}</code> expands to the length of
|
|
<code class="code">${<var class="var">name</var>[<var class="var">subscript</var>]}</code>.
|
|
If <var class="var">subscript</var> is ‘<samp class="samp">@</samp>’ or ‘<samp class="samp">*</samp>’,
|
|
the expansion is the number of elements in the array.
|
|
</p>
|
|
<p>If the <var class="var">subscript</var>
|
|
used to reference an element of an indexed array
|
|
evaluates to a number less than zero, it is
|
|
interpreted as relative to one greater than the maximum index of the array,
|
|
so negative indices count back from the end of the array,
|
|
and an index of -1 refers to the last element.
|
|
</p>
|
|
<p>Referencing an array variable without a subscript is equivalent to
|
|
referencing with a subscript of 0.
|
|
Any reference to a variable using a valid subscript is valid;
|
|
Bash creates an array if necessary.
|
|
</p>
|
|
<p>An array variable is considered set if a subscript has been assigned a
|
|
value.
|
|
The null string is a valid value.
|
|
</p>
|
|
<p>It is possible to obtain the keys (indices) of an array as well as the values.
|
|
${!<var class="var">name</var>[@]} and ${!<var class="var">name</var>[*]} expand to the indices
|
|
assigned in array variable <var class="var">name</var>.
|
|
The treatment when in double quotes is similar to the expansion of the
|
|
special parameters ‘<samp class="samp">@</samp>’ and ‘<samp class="samp">*</samp>’ within double quotes.
|
|
</p>
|
|
<p>The <code class="code">unset</code> builtin is used to destroy arrays.
|
|
<code class="code">unset <var class="var">name</var>[<var class="var">subscript</var>]</code>
|
|
unsets the array element at index <var class="var">subscript</var>.
|
|
Negative subscripts to indexed arrays are interpreted as described above.
|
|
Unsetting the last element of an array variable does not unset the variable.
|
|
<code class="code">unset <var class="var">name</var></code>, where <var class="var">name</var> is an array, removes the
|
|
entire array.
|
|
<code class="code">unset <var class="var">name</var>[<var class="var">subscript</var>]</code> behaves differently
|
|
depending on the array type when
|
|
<var class="var">subscript</var> is ‘<samp class="samp">*</samp>’ or ‘<samp class="samp">@</samp>’.
|
|
When <var class="var">name</var> is an associative array, it removes the element with key
|
|
‘<samp class="samp">*</samp>’ or ‘<samp class="samp">@</samp>’.
|
|
If <var class="var">name</var> is an indexed array, <code class="code">unset</code> removes all of the elements,
|
|
but does not remove the array itself.
|
|
</p>
|
|
<p>When using a variable name with a subscript as an argument to a command,
|
|
such as with <code class="code">unset</code>, without using the word expansion syntax
|
|
described above (e.g., unset a[4]),
|
|
the argument is subject to the shell’s filename expansion.
|
|
Quote the argument if pathname expansion is not desired
|
|
(e.g., unset ’a[4]’).
|
|
</p>
|
|
<p>The <code class="code">declare</code>, <code class="code">local</code>, and <code class="code">readonly</code>
|
|
builtins each accept a <samp class="option">-a</samp> option to specify an indexed
|
|
array and a <samp class="option">-A</samp> option to specify an associative array.
|
|
If both options are supplied, <samp class="option">-A</samp> takes precedence.
|
|
The <code class="code">read</code> builtin accepts a <samp class="option">-a</samp>
|
|
option to assign a list of words read from the standard input
|
|
to an array, and can read values from the standard input into
|
|
individual array elements. The <code class="code">set</code> and <code class="code">declare</code>
|
|
builtins display array values in a way that allows them to be
|
|
reused as input.
|
|
Other builtins accept array name arguments as well
|
|
(e.g., <code class="code">mapfile</code>); see the descriptions
|
|
of individual builtins for details.
|
|
The shell provides a number of builtin array variables.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="The-Directory-Stack">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Controlling-the-Prompt" accesskey="n" rel="next">Controlling the Prompt</a>, Previous: <a href="#Arrays" accesskey="p" rel="prev">Arrays</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="The-Directory-Stack-1"><span>6.8 The Directory Stack<a class="copiable-link" href="#The-Directory-Stack-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-directory-stack"></a>
|
|
|
|
|
|
<p>The directory stack is a list of recently-visited directories. The
|
|
<code class="code">pushd</code> builtin adds directories to the stack as it changes
|
|
the current directory, and the <code class="code">popd</code> builtin removes specified
|
|
directories from the stack and changes the current directory to
|
|
the directory removed. The <code class="code">dirs</code> builtin displays the contents
|
|
of the directory stack. The current directory is always the "top"
|
|
of the directory stack.
|
|
</p>
|
|
<p>The contents of the directory stack are also visible
|
|
as the value of the <code class="env">DIRSTACK</code> shell variable.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Directory-Stack-Builtins" accesskey="1">Directory Stack Builtins</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Directory-Stack-Builtins">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Up: <a href="#The-Directory-Stack" accesskey="u" rel="up">The Directory Stack</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Directory-Stack-Builtins-1"><span>6.8.1 Directory Stack Builtins<a class="copiable-link" href="#Directory-Stack-Builtins-1"> ¶</a></span></h4>
|
|
|
|
<dl class="table">
|
|
<dt><a id="index-dirs"></a><span><code class="code">dirs</code><a class="copiable-link" href="#index-dirs"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">dirs [-clpv] [+<var class="var">N</var> | -<var class="var">N</var>]
|
|
</pre></div>
|
|
|
|
<p>Without options, display the list of currently remembered directories.
|
|
Directories are added to the list with the <code class="code">pushd</code> command;
|
|
the <code class="code">popd</code> command removes directories from the list.
|
|
The current directory is always the first directory in the stack.
|
|
</p>
|
|
<p>Options, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-c</code></dt>
|
|
<dd><p>Clears the directory stack by deleting all of the elements.
|
|
</p></dd>
|
|
<dt><code class="code">-l</code></dt>
|
|
<dd><p>Produces a listing using full pathnames;
|
|
the default listing format uses a tilde to denote the home directory.
|
|
</p></dd>
|
|
<dt><code class="code">-p</code></dt>
|
|
<dd><p>Causes <code class="code">dirs</code> to print the directory stack with one entry per
|
|
line.
|
|
</p></dd>
|
|
<dt><code class="code">-v</code></dt>
|
|
<dd><p>Causes <code class="code">dirs</code> to print the directory stack with one entry per
|
|
line, prefixing each entry with its index in the stack.
|
|
</p></dd>
|
|
<dt><code class="code">+<var class="var">N</var></code></dt>
|
|
<dd><p>Displays the <var class="var">N</var>th directory (counting from the left of the
|
|
list printed by <code class="code">dirs</code> when invoked without options), starting
|
|
with zero.
|
|
</p></dd>
|
|
<dt><code class="code">-<var class="var">N</var></code></dt>
|
|
<dd><p>Displays the <var class="var">N</var>th directory (counting from the right of the
|
|
list printed by <code class="code">dirs</code> when invoked without options), starting
|
|
with zero.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
</dd>
|
|
<dt><a id="index-popd"></a><span><code class="code">popd</code><a class="copiable-link" href="#index-popd"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">popd [-n] [+<var class="var">N</var> | -<var class="var">N</var>]
|
|
</pre></div>
|
|
|
|
<p>Remove elements from the directory stack.
|
|
The elements are numbered from 0 starting at the first directory
|
|
listed by <code class="code">dirs</code>;
|
|
that is, <code class="code">popd</code> is equivalent to <code class="code">popd +0</code>.
|
|
</p>
|
|
<p>When no arguments are given, <code class="code">popd</code> removes the top directory
|
|
from the stack and changes to the new top directory.
|
|
</p>
|
|
<p>Arguments, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>Suppress the normal change of directory when removing directories
|
|
from the stack, only manipulate the stack.
|
|
</p></dd>
|
|
<dt><code class="code">+<var class="var">N</var></code></dt>
|
|
<dd><p>Remove the <var class="var">N</var>th directory (counting from the left of the
|
|
list printed by <code class="code">dirs</code>), starting with zero, from the stack.
|
|
</p></dd>
|
|
<dt><code class="code">-<var class="var">N</var></code></dt>
|
|
<dd><p>Remove the <var class="var">N</var>th directory (counting from the right of the
|
|
list printed by <code class="code">dirs</code>), starting with zero, from the stack.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If the top element of the directory stack is modified, and
|
|
the <samp class="option">-n</samp> option was not supplied, <code class="code">popd</code> uses the <code class="code">cd</code>
|
|
builtin to change to the directory at the top of the stack.
|
|
If the <code class="code">cd</code> fails, <code class="code">popd</code> returns a non-zero value.
|
|
</p>
|
|
<p>Otherwise, <code class="code">popd</code> returns an unsuccessful status if
|
|
an invalid option is specified, the directory stack
|
|
is empty, or <var class="var">N</var> specifies a non-existent directory stack entry.
|
|
</p>
|
|
<p>If the <code class="code">popd</code> command is successful,
|
|
Bash runs <code class="code">dirs</code> to show the final contents of the directory stack,
|
|
and the return status is 0.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-pushd"></a><span><code class="code">pushd</code><a class="copiable-link" href="#index-pushd"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">pushd [-n] [<var class="var">+N</var> | <var class="var">-N</var> | <var class="var">dir</var>]
|
|
</pre></div>
|
|
|
|
<p>Add a directory to the top of the directory stack, or rotate
|
|
the stack, making the new top of the stack the current working
|
|
directory.
|
|
With no arguments, <code class="code">pushd</code> exchanges the top two elements
|
|
of the directory stack.
|
|
</p>
|
|
<p>Arguments, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>Suppress the normal change of directory when rotating or
|
|
adding directories to the stack, only manipulate the stack.
|
|
</p></dd>
|
|
<dt><code class="code">+<var class="var">N</var></code></dt>
|
|
<dd><p>Rotate the stack so that
|
|
the <var class="var">N</var>th directory (counting from the left of the
|
|
list printed by <code class="code">dirs</code>, starting with zero) is at the top.
|
|
</p></dd>
|
|
<dt><code class="code">-<var class="var">N</var></code></dt>
|
|
<dd><p>Rotate the stack so that
|
|
the <var class="var">N</var>th directory (counting from the right of the
|
|
list printed by <code class="code">dirs</code>, starting with zero) is at the top.
|
|
</p></dd>
|
|
<dt><code class="code"><var class="var">dir</var></code></dt>
|
|
<dd><p>Make <var class="var">dir</var> be the top of the stack.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>After the stack has been modified, if the <samp class="option">-n</samp> option was not
|
|
supplied, <code class="code">pushd</code> uses the <code class="code">cd</code> builtin to change to the
|
|
directory at the top of the stack.
|
|
If the <code class="code">cd</code> fails, <code class="code">pushd</code> returns a non-zero value.
|
|
</p>
|
|
<p>Otherwise, if no arguments are supplied, <code class="code">pushd</code> returns zero
|
|
unless the directory stack is empty.
|
|
When rotating the directory stack, <code class="code">pushd</code> returns zero unless
|
|
the directory stack is empty or <var class="var">N</var> specifies a non-existent
|
|
directory stack element.
|
|
</p>
|
|
<p>If the <code class="code">pushd</code> command is successful,
|
|
Bash runs <code class="code">dirs</code> to show the final contents of the directory stack.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Controlling-the-Prompt">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#The-Restricted-Shell" accesskey="n" rel="next">The Restricted Shell</a>, Previous: <a href="#The-Directory-Stack" accesskey="p" rel="prev">The Directory Stack</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Controlling-the-Prompt-1"><span>6.9 Controlling the Prompt<a class="copiable-link" href="#Controlling-the-Prompt-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-prompting"></a>
|
|
|
|
<p>In addition, the following table describes the special characters which
|
|
can appear in the prompt variables <code class="env">PS0</code>, <code class="env">PS1</code>, <code class="env">PS2</code>, and
|
|
<code class="env">PS4</code>:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">\a</code></dt>
|
|
<dd><p>A bell character.
|
|
</p></dd>
|
|
<dt><code class="code">\d</code></dt>
|
|
<dd><p>The date, in "Weekday Month Date" format (e.g., "Tue May 26").
|
|
</p></dd>
|
|
<dt><code class="code">\D{<var class="var">format</var>}</code></dt>
|
|
<dd><p>The <var class="var">format</var> is passed to <code class="code">strftime</code>(3) and the result is inserted
|
|
into the prompt string; an empty <var class="var">format</var> results in a locale-specific
|
|
time representation.
|
|
The braces are required.
|
|
</p></dd>
|
|
<dt><code class="code">\e</code></dt>
|
|
<dd><p>An escape character.
|
|
</p></dd>
|
|
<dt><code class="code">\h</code></dt>
|
|
<dd><p>The hostname, up to the first ‘<samp class="samp">.</samp>’.
|
|
</p></dd>
|
|
<dt><code class="code">\H</code></dt>
|
|
<dd><p>The hostname.
|
|
</p></dd>
|
|
<dt><code class="code">\j</code></dt>
|
|
<dd><p>The number of jobs currently managed by the shell.
|
|
</p></dd>
|
|
<dt><code class="code">\l</code></dt>
|
|
<dd><p>The basename of the shell’s terminal device name (e.g., "ttys0").
|
|
</p></dd>
|
|
<dt><code class="code">\n</code></dt>
|
|
<dd><p>A newline.
|
|
</p></dd>
|
|
<dt><code class="code">\r</code></dt>
|
|
<dd><p>A carriage return.
|
|
</p></dd>
|
|
<dt><code class="code">\s</code></dt>
|
|
<dd><p>The name of the shell: the basename of <code class="code">$0</code> (the portion
|
|
following the final slash).
|
|
</p></dd>
|
|
<dt><code class="code">\t</code></dt>
|
|
<dd><p>The time, in 24-hour HH:MM:SS format.
|
|
</p></dd>
|
|
<dt><code class="code">\T</code></dt>
|
|
<dd><p>The time, in 12-hour HH:MM:SS format.
|
|
</p></dd>
|
|
<dt><code class="code">\@</code></dt>
|
|
<dd><p>The time, in 12-hour am/pm format.
|
|
</p></dd>
|
|
<dt><code class="code">\A</code></dt>
|
|
<dd><p>The time, in 24-hour HH:MM format.
|
|
</p></dd>
|
|
<dt><code class="code">\u</code></dt>
|
|
<dd><p>The username of the current user.
|
|
</p></dd>
|
|
<dt><code class="code">\v</code></dt>
|
|
<dd><p>The Bash version (e.g., 2.00).
|
|
</p></dd>
|
|
<dt><code class="code">\V</code></dt>
|
|
<dd><p>The Bash release, version + patchlevel (e.g., 2.00.0).
|
|
</p></dd>
|
|
<dt><code class="code">\w</code></dt>
|
|
<dd><p>The value of the <code class="code">PWD</code> shell variable (<code class="env">$PWD</code>),
|
|
with <code class="env">$HOME</code> abbreviated with a tilde
|
|
(uses the <code class="env">$PROMPT_DIRTRIM</code> variable).
|
|
</p></dd>
|
|
<dt><code class="code">\W</code></dt>
|
|
<dd><p>The basename of <code class="env">$PWD</code>, with <code class="env">$HOME</code> abbreviated with a tilde.
|
|
</p></dd>
|
|
<dt><code class="code">\!</code></dt>
|
|
<dd><p>The history number of this command.
|
|
</p></dd>
|
|
<dt><code class="code">\#</code></dt>
|
|
<dd><p>The command number of this command.
|
|
</p></dd>
|
|
<dt><code class="code">\$</code></dt>
|
|
<dd><p>If the effective uid is 0, <code class="code">#</code>, otherwise <code class="code">$</code>.
|
|
</p></dd>
|
|
<dt><code class="code">\<var class="var">nnn</var></code></dt>
|
|
<dd><p>The character whose ASCII code is the octal value <var class="var">nnn</var>.
|
|
</p></dd>
|
|
<dt><code class="code">\\</code></dt>
|
|
<dd><p>A backslash.
|
|
</p></dd>
|
|
<dt><code class="code">\[</code></dt>
|
|
<dd><p>Begin a sequence of non-printing characters.
|
|
Thiss could be used to
|
|
embed a terminal control sequence into the prompt.
|
|
</p></dd>
|
|
<dt><code class="code">\]</code></dt>
|
|
<dd><p>End a sequence of non-printing characters.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The command number and the history number are usually different:
|
|
the history number of a command is its position in the history
|
|
list, which may include commands restored from the history file
|
|
(see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>), while the command number is
|
|
the position in the sequence of commands executed during the current
|
|
shell session.
|
|
</p>
|
|
<p>After the string is decoded, it is expanded via
|
|
parameter expansion, command substitution, arithmetic
|
|
expansion, and quote removal, subject to the value of the
|
|
<code class="code">promptvars</code> shell option (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
This can have unwanted side effects if escaped portions of the string
|
|
appear within command substitution or contain characters special to
|
|
word expansion.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="The-Restricted-Shell">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bash-POSIX-Mode" accesskey="n" rel="next">Bash and POSIX</a>, Previous: <a href="#Controlling-the-Prompt" accesskey="p" rel="prev">Controlling the Prompt</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="The-Restricted-Shell-1"><span>6.10 The Restricted Shell<a class="copiable-link" href="#The-Restricted-Shell-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-restricted-shell"></a>
|
|
|
|
<p>If Bash is started with the name <code class="code">rbash</code>, or the
|
|
<samp class="option">--restricted</samp>
|
|
or
|
|
<samp class="option">-r</samp>
|
|
option is supplied at invocation, the shell becomes <var class="var">restricted</var>.
|
|
A restricted shell is used to
|
|
set up an environment more controlled than the standard shell.
|
|
A restricted shell behaves identically to <code class="code">bash</code>
|
|
with the exception that the following are disallowed or not performed:
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>Changing directories with the <code class="code">cd</code> builtin.
|
|
</li><li>Setting or unsetting the values of the <code class="env">SHELL</code>, <code class="env">PATH</code>,
|
|
<code class="env">HISTFILE</code>,
|
|
<code class="env">ENV</code>, or <code class="env">BASH_ENV</code> variables.
|
|
</li><li>Specifying command names containing slashes.
|
|
</li><li>Specifying a filename containing a slash as an argument to the <code class="code">.</code>
|
|
builtin command.
|
|
</li><li>Using the <samp class="option">-p</samp> option to the <code class="code">.</code> builtin command
|
|
to specify a search path.
|
|
</li><li>Specifying a filename containing a slash as an argument to the <code class="code">history</code>
|
|
builtin command.
|
|
</li><li>Specifying a filename containing a slash as an argument to the <samp class="option">-p</samp>
|
|
option to the <code class="code">hash</code> builtin command.
|
|
</li><li>Importing function definitions from the shell environment at startup.
|
|
</li><li>Parsing the value of <code class="env">SHELLOPTS</code> from the shell environment at startup.
|
|
</li><li>Redirecting output using the ‘<samp class="samp">></samp>’, ‘<samp class="samp">>|</samp>’, ‘<samp class="samp"><></samp>’, ‘<samp class="samp">>&</samp>’,
|
|
‘<samp class="samp">&></samp>’, and ‘<samp class="samp">>></samp>’ redirection operators.
|
|
</li><li>Using the <code class="code">exec</code> builtin to replace the shell with another command.
|
|
</li><li>Adding or deleting builtin commands with the
|
|
<samp class="option">-f</samp> and <samp class="option">-d</samp> options to the <code class="code">enable</code> builtin.
|
|
</li><li>Using the <code class="code">enable</code> builtin command to enable disabled shell builtins.
|
|
</li><li>Specifying the <samp class="option">-p</samp> option to the <code class="code">command</code> builtin.
|
|
</li><li>Turning off restricted mode with ‘<samp class="samp">set +r</samp>’ or ‘<samp class="samp">shopt -u restricted_shell</samp>’.
|
|
</li></ul>
|
|
|
|
<p>These restrictions are enforced after any startup files are read.
|
|
</p>
|
|
<p>When a command that is found to be a shell script is executed
|
|
(see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>), <code class="code">rbash</code> turns off any restrictions in
|
|
the shell spawned to execute the script.
|
|
</p>
|
|
<p>The restricted shell mode is only one component of a useful restricted
|
|
environment. It should be accompanied by setting <code class="env">PATH</code> to a value
|
|
that allows execution of only a few verified commands (commands that
|
|
allow shell escapes are particularly vulnerable), changing the current
|
|
directory to a non-writable directory other than <code class="env">$HOME</code> after login,
|
|
not allowing the restricted shell to execute shell scripts, and cleaning
|
|
the environment of variables that cause some commands to modify their
|
|
behavior (e.g., <code class="env">VISUAL</code> or <code class="env">PAGER</code>).
|
|
</p>
|
|
<p>Modern systems provide more secure ways to implement a restricted environment,
|
|
such as <code class="code">jails</code>, <code class="code">zones</code>, or <code class="code">containers</code>.
|
|
</p>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Bash-POSIX-Mode">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Shell-Compatibility-Mode" accesskey="n" rel="next">Shell Compatibility Mode</a>, Previous: <a href="#The-Restricted-Shell" accesskey="p" rel="prev">The Restricted Shell</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bash-and-POSIX"><span>6.11 Bash and POSIX<a class="copiable-link" href="#Bash-and-POSIX"> ¶</a></span></h3>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#What-is-POSIX_003f" accesskey="1">What is POSIX?</a></li>
|
|
<li><a href="#Bash-POSIX-Mode-1" accesskey="2">Bash POSIX Mode</a></li>
|
|
</ul>
|
|
<div class="subsection-level-extent" id="What-is-POSIX_003f">
|
|
<h4 class="subsection"><span>6.11.1 What is POSIX?<a class="copiable-link" href="#What-is-POSIX_003f"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-POSIX-description"></a>
|
|
|
|
<p><small class="sc">POSIX</small>
|
|
is the name for a family of standards based on Unix.
|
|
A number of Unix services, tools, and functions are part of the standard,
|
|
ranging from the basic system calls and C library functions to common
|
|
applications and tools to system administration and management.
|
|
</p>
|
|
<p>The <small class="sc">POSIX</small> Shell and Utilities standard was originally developed by
|
|
IEEE Working Group 1003.2 (POSIX.2).
|
|
The first edition of the 1003.2 standard was published in 1992.
|
|
It was merged with the original IEEE 1003.1 Working Group and is
|
|
currently maintained by the Austin Group (a joint working group of the
|
|
IEEE, The Open Group and ISO/IEC SC22/WG15).
|
|
Today the Shell and Utilities are a volume within the set of documents that
|
|
make up IEEE Std 1003.1-2024, and thus the former POSIX.2 (from 1992)
|
|
is now part of the current unified <small class="sc">POSIX</small> standard.
|
|
</p>
|
|
<p>The Shell and Utilities volume concentrates on the command
|
|
interpreter interface and utility programs commonly executed from
|
|
the command line or by other programs.
|
|
The standard is freely available on the web at
|
|
<a class="url" href="https://pubs.opengroup.org/onlinepubs/9799919799/utilities/contents.html">https://pubs.opengroup.org/onlinepubs/9799919799/utilities/contents.html</a>.
|
|
</p>
|
|
<p>Bash is concerned with the aspects of the shell’s behavior defined
|
|
by the <small class="sc">POSIX</small> Shell and Utilities volume.
|
|
The shell command
|
|
language has of course been standardized, including the basic flow
|
|
control and program execution constructs, I/O redirection and
|
|
pipelines, argument handling, variable expansion, and quoting.
|
|
</p>
|
|
<p>The <i class="i">special</i> builtins, which must be implemented as part of the
|
|
shell to provide the desired functionality, are specified as
|
|
being part of the shell; examples of these are <code class="code">eval</code> and
|
|
<code class="code">export</code>.
|
|
Other utilities appear in the sections of <small class="sc">POSIX</small> not
|
|
devoted to the shell which are commonly (and in some cases must
|
|
be) implemented as builtin commands, such as
|
|
<code class="code">read</code> and <code class="code">test</code>.
|
|
<small class="sc">POSIX</small> also specifies aspects of the shell’s interactive
|
|
behavior, including job control and command
|
|
line editing.
|
|
Only vi-style line editing commands have been standardized;
|
|
emacs editing commands were left out due to objections.
|
|
</p>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Bash-POSIX-Mode-1">
|
|
<h4 class="subsection"><span>6.11.2 Bash POSIX Mode<a class="copiable-link" href="#Bash-POSIX-Mode-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-POSIX-Mode"></a>
|
|
|
|
<p>Although Bash is an implementation of the <small class="sc">POSIX</small> shell
|
|
specification, there are areas where the Bash default behavior
|
|
differs from the specification.
|
|
The Bash <em class="dfn">posix mode</em> changes the Bash
|
|
behavior in these areas so that it conforms more strictly
|
|
to the standard.
|
|
</p>
|
|
<p>Starting Bash with the <samp class="option">--posix</samp> command-line option or executing
|
|
‘<samp class="samp">set -o posix</samp>’ while Bash is running will cause Bash to conform more
|
|
closely to the <small class="sc">POSIX</small> standard by changing the behavior to
|
|
match that specified by <small class="sc">POSIX</small> in areas where the Bash default differs.
|
|
</p>
|
|
<p>When invoked as <code class="code">sh</code>, Bash enters <small class="sc">POSIX</small> mode after reading the
|
|
startup files.
|
|
</p>
|
|
<p>The following list is what’s changed when <small class="sc">POSIX</small> mode is in effect:
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> Bash ensures that the <code class="env">POSIXLY_CORRECT</code> variable is set.
|
|
|
|
</li><li> Bash reads and executes the <small class="sc">POSIX</small> startup files
|
|
(<code class="env">$ENV</code>) rather than
|
|
the normal Bash files (see <a class="pxref" href="#Bash-Startup-Files">Bash Startup Files</a>).
|
|
|
|
</li><li> Alias expansion is always enabled, even in non-interactive shells.
|
|
|
|
</li><li> Reserved words appearing in a context where reserved words are recognized
|
|
do not undergo alias expansion.
|
|
|
|
</li><li> Alias expansion is performed when initially parsing a command substitution.
|
|
The default (non-posix)
|
|
mode generally defers it, when enabled, until the command
|
|
substitution is executed.
|
|
This means that command substitution will not
|
|
expand aliases that are defined after the command substitution is initially
|
|
parsed (e.g., as part of a function definition).
|
|
|
|
</li><li> The <code class="code">time</code> reserved word may be used by itself as a simple command.
|
|
When used in this way, it displays timing statistics for the shell
|
|
and its completed children.
|
|
The <code class="env">TIMEFORMAT</code> variable controls the format of the timing information.
|
|
|
|
</li><li> The parser does not recognize <code class="code">time</code> as a reserved word if the next
|
|
token begins with a ‘<samp class="samp">-</samp>’.
|
|
|
|
</li><li> When parsing and expanding a ${…} expansion that appears within
|
|
double quotes, single quotes are no longer special and cannot be used to
|
|
quote a closing brace or other special character, unless the operator is
|
|
one of those defined to perform pattern removal.
|
|
In this case, they do not have to appear as matched pairs.
|
|
|
|
|
|
</li><li> Redirection operators do not perform filename expansion on the word
|
|
in a redirection unless the shell is interactive.
|
|
|
|
</li><li> Redirection operators do not perform word splitting on the word in a
|
|
redirection.
|
|
|
|
</li><li> Function names may not be the same as one of the <small class="sc">POSIX</small> special
|
|
builtins.
|
|
|
|
</li><li> Tilde expansion is only performed on assignments preceding a command
|
|
name, rather than on all assignment statements on the line.
|
|
|
|
</li><li> While variable indirection is available, it may not be applied to the
|
|
‘<samp class="samp">#</samp>’ and ‘<samp class="samp">?</samp>’ special parameters.
|
|
|
|
</li><li> Expanding the ‘<samp class="samp">*</samp>’ special parameter in a pattern context where the
|
|
expansion is double-quoted does not treat the <code class="code">$*</code> as if it were
|
|
double-quoted.
|
|
|
|
</li><li> A double quote character (‘<samp class="samp">"</samp>’) is treated specially when it appears
|
|
in a backquoted command substitution in the body of a here-document that
|
|
undergoes expansion.
|
|
That means, for example, that a backslash preceding a double quote
|
|
character will escape it and the backslash will be removed.
|
|
|
|
</li><li> Command substitutions don’t set the ‘<samp class="samp">?</samp>’ special parameter.
|
|
The exit
|
|
status of a simple command without a command word is still the exit status
|
|
of the last command substitution that occurred while evaluating the variable
|
|
assignments and redirections in that command, but that does not happen until
|
|
after all of the assignments and redirections.
|
|
|
|
</li><li> Literal tildes that appear as the first character in elements of
|
|
the <code class="env">PATH</code> variable are not expanded as described above
|
|
under <a class="ref" href="#Tilde-Expansion">Tilde Expansion</a>.
|
|
|
|
</li><li> Command lookup finds <small class="sc">POSIX</small> special builtins before shell functions,
|
|
including output printed by the <code class="code">type</code> and <code class="code">command</code> builtins.
|
|
|
|
</li><li> Even if a shell function whose name contains a slash was defined before
|
|
entering <small class="sc">POSIX</small> mode, the shell will not execute a function whose name
|
|
contains one or more slashes.
|
|
|
|
</li><li> When a command in the hash table no longer exists, Bash will re-search
|
|
<code class="env">$PATH</code> to find the new location.
|
|
This is also available with ‘<samp class="samp">shopt -s checkhash</samp>’.
|
|
|
|
</li><li> Bash will not insert a command without the execute bit set into the
|
|
command hash table, even if it returns it as a (last-ditch) result
|
|
from a <code class="env">$PATH</code> search.
|
|
|
|
</li><li> The message printed by the job control code and builtins when a job
|
|
exits with a non-zero status is “Done(status)”.
|
|
|
|
</li><li> The message printed by the job control code and builtins when a job
|
|
is stopped is “Stopped(<var class="var">signame</var>)”, where <var class="var">signame</var> is, for
|
|
example, <code class="code">SIGTSTP</code>.
|
|
|
|
</li><li> If the shell is interactive, Bash does not perform job notifications
|
|
between executing commands in lists separated by ‘<samp class="samp">;</samp>’ or newline.
|
|
Non-interactive shells print status messages after a foreground job
|
|
in a list completes.
|
|
|
|
</li><li> If the shell is interactive, Bash waits until the next prompt before
|
|
printing the status of a background job that changes status or a foreground
|
|
job that terminates due to a signal.
|
|
Non-interactive shells print status messages after a foreground job
|
|
completes.
|
|
|
|
</li><li> Bash permanently removes jobs from the jobs table after notifying the
|
|
user of their termination via the <code class="code">wait</code> or <code class="code">jobs</code> builtins.
|
|
It removes the job from the jobs list after notifying the user of its
|
|
termination, but the status is still available via <code class="code">wait</code>, as long
|
|
as <code class="code">wait</code> is supplied a <small class="sc">PID</small> argument.
|
|
|
|
</li><li> The <code class="code">vi</code> editing mode will invoke the <code class="code">vi</code> editor directly when
|
|
the ‘<samp class="samp">v</samp>’ command is run, instead of checking <code class="code">$VISUAL</code> and
|
|
<code class="code">$EDITOR</code>.
|
|
|
|
</li><li> Prompt expansion enables the
|
|
<small class="sc">POSIX</small> <code class="env">PS1</code> and <code class="env">PS2</code> expansions of ‘<samp class="samp">!</samp>’ to
|
|
the history number and ‘<samp class="samp">!!</samp>’ to ‘<samp class="samp">!</samp>’,
|
|
and Bash performs parameter expansion on the values of <code class="env">PS1</code> and
|
|
<code class="env">PS2</code> regardless of the setting of the <code class="code">promptvars</code> option.
|
|
|
|
</li><li> The default history file is <samp class="file">~/.sh_history</samp> (this is the
|
|
default value the shell assigns to <code class="env">$HISTFILE</code>).
|
|
|
|
</li><li> The ‘<samp class="samp">!</samp>’ character does not introduce history expansion within a
|
|
double-quoted string, even if the <code class="code">histexpand</code> option is enabled.
|
|
|
|
</li><li> When printing shell function definitions (e.g., by <code class="code">type</code>), Bash does
|
|
not print the <code class="code">function</code> reserved word unless necessary.
|
|
|
|
</li><li> Non-interactive shells exit if a syntax error in an arithmetic expansion
|
|
results in an invalid expression.
|
|
|
|
</li><li> Non-interactive shells exit if a parameter expansion error occurs.
|
|
|
|
</li><li> If a <small class="sc">POSIX</small> special builtin returns an error status, a
|
|
non-interactive shell exits.
|
|
The fatal errors are those listed in
|
|
the <small class="sc">POSIX</small> standard, and include things like passing incorrect options,
|
|
redirection errors, variable assignment errors for assignments preceding
|
|
the command name, and so on.
|
|
|
|
</li><li> A non-interactive shell exits with an error status if a variable
|
|
assignment error occurs when no command name follows the assignment
|
|
statements.
|
|
A variable assignment error occurs, for example, when trying to assign
|
|
a value to a readonly variable.
|
|
|
|
</li><li> A non-interactive shell exits with an error status if a variable
|
|
assignment error occurs in an assignment statement preceding a special
|
|
builtin, but not with any other simple command.
|
|
For any other simple
|
|
command, the shell aborts execution of that command, and execution continues
|
|
at the top level ("the shell shall not perform any further processing of the
|
|
command in which the error occurred").
|
|
|
|
</li><li> A non-interactive shell exits with an error status if the iteration
|
|
variable in a <code class="code">for</code> statement or the selection variable in a
|
|
<code class="code">select</code> statement is a readonly variable or has an invalid name.
|
|
|
|
</li><li> Non-interactive shells exit if <var class="var">filename</var> in <code class="code">.</code> <var class="var">filename</var>
|
|
is not found.
|
|
|
|
</li><li> Non-interactive shells exit if there is a syntax error in a script read
|
|
with the <code class="code">.</code> or <code class="code">source</code> builtins, or in a string processed by
|
|
the <code class="code">eval</code> builtin.
|
|
|
|
</li><li> Non-interactive shells exit
|
|
if the <code class="code">export</code>, <code class="code">readonly</code> or <code class="code">unset</code>
|
|
builtin commands get an argument
|
|
that is not a valid identifier, and they are not operating on shell
|
|
functions.
|
|
These errors force an exit because these are special builtins.
|
|
|
|
</li><li> Assignment statements preceding <small class="sc">POSIX</small> special builtins
|
|
persist in the shell environment after the builtin completes.
|
|
|
|
</li><li> The <code class="code">command</code> builtin does not prevent builtins that take assignment
|
|
statements as arguments from expanding them as assignment statements;
|
|
when not in <small class="sc">POSIX</small> mode, declaration commands lose their assignment
|
|
statement expansion properties when preceded by <code class="code">command</code>.
|
|
|
|
</li><li> Enabling <small class="sc">POSIX</small> mode has the effect of setting the
|
|
<code class="code">inherit_errexit</code> option, so
|
|
subshells spawned to execute command substitutions inherit the value of
|
|
the <samp class="option">-e</samp> option from the parent shell.
|
|
When the <code class="code">inherit_errexit</code> option is not enabled,
|
|
Bash clears the <samp class="option">-e</samp> option in such subshells.
|
|
|
|
</li><li> Enabling <small class="sc">POSIX</small> mode has the effect of setting the
|
|
<code class="code">shift_verbose</code> option, so numeric arguments to <code class="code">shift</code>
|
|
that exceed the number of positional parameters will result in an
|
|
error message.
|
|
|
|
</li><li> Enabling <small class="sc">POSIX</small> mode has the effect of setting the
|
|
<code class="code">interactive_comments</code> option (see <a class="pxref" href="#Comments">Comments</a>).
|
|
|
|
</li><li> The <code class="code">.</code> and <code class="code">source</code> builtins do not search the current directory
|
|
for the filename argument if it is not found by searching <code class="env">PATH</code>.
|
|
|
|
</li><li> When the <code class="code">alias</code> builtin displays alias definitions, it does not
|
|
display them with a leading ‘<samp class="samp">alias </samp>’ unless the <samp class="option">-p</samp> option
|
|
is supplied.
|
|
|
|
</li><li> The <code class="code">bg</code> builtin uses the required format to describe each job placed
|
|
in the background, which does not include an indication of whether the job
|
|
is the current or previous job.
|
|
|
|
</li><li> When the <code class="code">cd</code> builtin is invoked in logical mode, and the pathname
|
|
constructed from <code class="code">$PWD</code> and the directory name supplied as an argument
|
|
does not refer to an existing directory, <code class="code">cd</code> will fail instead of
|
|
falling back to physical mode.
|
|
|
|
</li><li> When the <code class="code">cd</code> builtin cannot change a directory because the
|
|
length of the pathname
|
|
constructed from <code class="code">$PWD</code> and the directory name supplied as an argument
|
|
exceeds <code class="code">PATH_MAX</code> when canonicalized, <code class="code">cd</code> will
|
|
attempt to use the supplied directory name.
|
|
|
|
</li><li> When the <code class="code">xpg_echo</code> option is enabled, Bash does not attempt to
|
|
interpret any arguments to <code class="code">echo</code> as options.
|
|
<code class="code">echo</code> displays each argument after converting escape sequences.
|
|
|
|
</li><li> The <code class="code">export</code> and <code class="code">readonly</code> builtin commands display their
|
|
output in the format required by <small class="sc">POSIX</small>.
|
|
|
|
</li><li> When listing the history, the <code class="code">fc</code> builtin does not include an
|
|
indication of whether or not a history entry has been modified.
|
|
|
|
</li><li> The default editor used by <code class="code">fc</code> is <code class="code">ed</code>.
|
|
|
|
</li><li> <code class="code">fc</code> treats extra arguments as an error instead of ignoring them.
|
|
|
|
</li><li> If there are too many arguments supplied to <code class="code">fc -s</code>, <code class="code">fc</code> prints
|
|
an error message and returns failure.
|
|
|
|
</li><li> The output of ‘<samp class="samp">kill -l</samp>’ prints all the signal names on a single line,
|
|
separated by spaces, without the ‘<samp class="samp">SIG</samp>’ prefix.
|
|
|
|
</li><li> The <code class="code">kill</code> builtin does not accept signal names with a ‘<samp class="samp">SIG</samp>’
|
|
prefix.
|
|
|
|
</li><li> The <code class="code">kill</code> builtin returns a failure status if any of the pid or job
|
|
arguments are invalid or if sending the specified signal to any of them
|
|
fails.
|
|
In default mode, <code class="code">kill</code> returns success if the signal was
|
|
successfully sent to any of the specified processes.
|
|
|
|
</li><li> The <code class="code">printf</code> builtin uses <code class="code">double</code> (via <code class="code">strtod</code>) to convert
|
|
arguments corresponding to floating point conversion specifiers, instead of
|
|
<code class="code">long double</code> if it’s available.
|
|
The ‘<samp class="samp">L</samp>’ length modifier forces
|
|
<code class="code">printf</code> to use <code class="code">long double</code> if it’s available.
|
|
|
|
</li><li> The <code class="code">pwd</code> builtin verifies that the value it prints is the same as the
|
|
current directory, even if it is not asked to check the file system with the
|
|
<samp class="option">-P</samp> option.
|
|
|
|
</li><li> The <code class="code">read</code> builtin may be interrupted by a signal for which a trap
|
|
has been set.
|
|
If Bash receives a trapped signal while executing <code class="code">read</code>, the trap
|
|
handler executes and <code class="code">read</code> returns an exit status greater than 128.
|
|
|
|
</li><li> When the <code class="code">set</code> builtin is invoked without options, it does not display
|
|
shell function names and definitions.
|
|
|
|
</li><li> When the <code class="code">set</code> builtin is invoked without options, it displays
|
|
variable values without quotes, unless they contain shell metacharacters,
|
|
even if the result contains nonprinting characters.
|
|
|
|
</li><li> The <code class="code">test</code> builtin compares strings using the current locale when
|
|
evaluating the ‘<samp class="samp"><</samp>’ and ‘<samp class="samp">></samp>’ binary operators.
|
|
|
|
</li><li> The <code class="code">test</code> builtin’s <samp class="option">-t</samp> unary primary requires an argument.
|
|
Historical versions of <code class="code">test</code> made the argument optional in certain
|
|
cases, and Bash attempts to accommodate those for backwards compatibility.
|
|
|
|
</li><li> The <code class="code">trap</code> builtin displays signal names without the leading
|
|
<code class="code">SIG</code>.
|
|
|
|
</li><li> The <code class="code">trap</code> builtin doesn’t check the first argument for a possible
|
|
signal specification and revert the signal handling to the original
|
|
disposition if it is, unless that argument consists solely of digits and
|
|
is a valid signal number.
|
|
If users want to reset the handler for a given
|
|
signal to the original disposition, they should use ‘<samp class="samp">-</samp>’ as the
|
|
first argument.
|
|
|
|
</li><li> <code class="code">trap -p</code> without arguments displays signals whose dispositions are
|
|
set to SIG_DFL and those that were ignored when the shell started, not
|
|
just trapped signals.
|
|
|
|
</li><li> The <code class="code">type</code> and <code class="code">command</code> builtins will not report a non-executable
|
|
file as having been found, though the shell will attempt to execute such a
|
|
file if it is the only so-named file found in <code class="code">$PATH</code>.
|
|
|
|
</li><li> The <code class="code">ulimit</code> builtin uses a block size of 512 bytes for the <samp class="option">-c</samp>
|
|
and <samp class="option">-f</samp> options.
|
|
|
|
</li><li> The <code class="code">unset</code> builtin with the <samp class="option">-v</samp> option specified returns a
|
|
fatal error if it attempts to unset a <code class="code">readonly</code> or <code class="code">non-unsettable</code>
|
|
variable,
|
|
which causes a non-interactive shell to exit.
|
|
|
|
</li><li> When asked to unset a variable that appears in an assignment statement
|
|
preceding the command, the <code class="code">unset</code> builtin attempts to unset a variable
|
|
of the same name in the current or previous scope as well.
|
|
This implements the required "if an assigned variable is further modified
|
|
by the utility, the modifications made by the utility shall persist" behavior.
|
|
|
|
</li><li> The arrival of <code class="code">SIGCHLD</code> when a trap is set on <code class="code">SIGCHLD</code> does
|
|
not interrupt the <code class="code">wait</code> builtin and cause it to return immediately.
|
|
The trap command is run once for each child that exits.
|
|
|
|
</li><li> Bash removes an exited background process’s status from the list of such
|
|
statuses after the <code class="code">wait</code> builtin returns it.
|
|
|
|
</li></ol>
|
|
|
|
<p>There is additional <small class="sc">POSIX</small> behavior that Bash does not implement by
|
|
default even when in <small class="sc">POSIX</small> mode.
|
|
Specifically:
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> <small class="sc">POSIX</small> requires that word splitting be byte-oriented.
|
|
That is, each <em class="emph">byte</em> in the value of <code class="env">IFS</code> potentially splits a
|
|
word, even if that byte is part of a multibyte character in <code class="env">IFS</code>
|
|
or part of multibyte character in the word.
|
|
Bash allows multibyte characters in the value of <code class="env">IFS</code>, treating
|
|
a valid multibyte character as a single delimiter, and will not
|
|
split a valid multibyte character even if one of the bytes composing that
|
|
character appears in <code class="env">IFS</code>.
|
|
This is <small class="sc">POSIX</small> interpretation 1560, further modified by issue 1924.
|
|
|
|
</li><li> The <code class="code">fc</code> builtin checks <code class="code">$EDITOR</code> as a program to edit history
|
|
entries if <code class="code">FCEDIT</code> is unset, rather than defaulting directly to
|
|
<code class="code">ed</code>.
|
|
<code class="code">fc</code> uses <code class="code">ed</code> if <code class="code">EDITOR</code> is unset.
|
|
|
|
|
|
</li><li> As noted above, Bash requires the <code class="code">xpg_echo</code> option to be enabled for
|
|
the <code class="code">echo</code> builtin to be fully conformant.
|
|
|
|
</li></ol>
|
|
|
|
<p>Bash can be configured to be <small class="sc">POSIX</small>-conformant by default, by specifying
|
|
the <samp class="option">--enable-strict-posix-default</samp> to <code class="code">configure</code> when building
|
|
(see <a class="pxref" href="#Optional-Features">Optional Features</a>).
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Shell-Compatibility-Mode">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Bash-POSIX-Mode" accesskey="p" rel="prev">Bash and POSIX</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Shell-Compatibility-Mode-1"><span>6.12 Shell Compatibility Mode<a class="copiable-link" href="#Shell-Compatibility-Mode-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-Compatibility-Level"></a>
|
|
<a class="index-entry-id" id="index-Compatibility-Mode"></a>
|
|
|
|
<p>Bash-4.0 introduced the concept of a <em class="dfn">shell compatibility level</em>,
|
|
specified as a set of options to the shopt builtin
|
|
(<code class="code">compat31</code>,
|
|
<code class="code">compat32</code>,
|
|
<code class="code">compat40</code>,
|
|
<code class="code">compat41</code>,
|
|
and so on).
|
|
There is only one current
|
|
compatibility level – each option is mutually exclusive.
|
|
The compatibility level is intended to allow users to select behavior
|
|
from previous versions that is incompatible with newer versions
|
|
while they migrate scripts to use current features and behavior.
|
|
It’s intended to be a temporary solution.
|
|
</p>
|
|
<p>This section does not mention behavior that is standard for a particular
|
|
version (e.g., setting <code class="code">compat32</code> means that quoting the right hand
|
|
side of the regexp
|
|
matching operator quotes special regexp characters in the word, which is
|
|
default behavior in bash-3.2 and subsequent versions).
|
|
</p>
|
|
<p>If a user enables, say, <code class="code">compat32</code>, it may affect the behavior of other
|
|
compatibility levels up to and including the current compatibility level.
|
|
The idea is that each compatibility level controls behavior that changed
|
|
in that version of Bash,
|
|
but that behavior may have been present in earlier versions.
|
|
For instance, the change to use locale-based comparisons with the <code class="code">[[</code>
|
|
command came in bash-4.1, and earlier versions used ASCII-based comparisons,
|
|
so enabling <code class="code">compat32</code> will enable ASCII-based comparisons as well.
|
|
That granularity may not be sufficient for
|
|
all uses, and as a result users should employ compatibility levels carefully.
|
|
Read the documentation for a particular feature to find out the
|
|
current behavior.
|
|
</p>
|
|
<p>Bash-4.3 introduced a new shell variable: <code class="env">BASH_COMPAT</code>.
|
|
The value assigned
|
|
to this variable (a decimal version number like 4.2, or an integer
|
|
corresponding to the <code class="code">compat</code><var class="var">NN</var> option, like 42) determines the
|
|
compatibility level.
|
|
</p>
|
|
<p>Starting with bash-4.4, Bash began deprecating older compatibility
|
|
levels.
|
|
Eventually, the options will be removed in favor of <code class="env">BASH_COMPAT</code>.
|
|
</p>
|
|
<p>Bash-5.0 was the final version for which there was an individual shopt
|
|
option for the previous version.
|
|
<code class="env">BASH_COMPAT</code> is the only mechanism to control the compatibility level
|
|
in versions newer than bash-5.0.
|
|
</p>
|
|
<p>The following table describes the behavior changes controlled by each
|
|
compatibility level setting.
|
|
The <code class="code">compat</code><var class="var">NN</var> tag is used as shorthand for setting the
|
|
compatibility level
|
|
to <var class="var">NN</var> using one of the following mechanisms.
|
|
For versions prior to bash-5.0, the compatibility level may be set using
|
|
the corresponding <code class="code">compat</code><var class="var">NN</var> shopt option.
|
|
For bash-4.3 and later versions, the <code class="env">BASH_COMPAT</code> variable is preferred,
|
|
and it is required for bash-5.1 and later versions.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">compat31</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>Quoting the rhs of the <code class="code">[[</code> command’s regexp matching operator (=~)
|
|
has no special effect
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat40</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>The ‘<samp class="samp"><</samp>’ and ‘<samp class="samp">></samp>’ operators to the <code class="code">[[</code> command do not
|
|
consider the current locale when comparing strings; they use ASCII
|
|
ordering.
|
|
Bash versions prior to bash-4.1 use ASCII collation and strcmp(3);
|
|
bash-4.1 and later use the current locale’s collation sequence and
|
|
strcoll(3).
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat41</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>In <small class="sc">POSIX</small> mode, <code class="code">time</code> may be followed by options and still be
|
|
recognized as a reserved word (this is
|
|
<small class="sc">POSIX</small>
|
|
interpretation 267).
|
|
</li><li>In <small class="sc">POSIX</small> mode, the parser requires that an even number of single
|
|
quotes occur in the <var class="var">word</var> portion of a double-quoted ${…}
|
|
parameter expansion and treats them specially, so that characters within
|
|
the single quotes are considered quoted
|
|
(this is
|
|
<small class="sc">POSIX</small>
|
|
interpretation 221).
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat42</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>The replacement string in double-quoted pattern substitution does not
|
|
undergo quote removal, as it does in versions after bash-4.2.
|
|
</li><li>In <small class="sc">POSIX</small> mode, single quotes are considered special when expanding
|
|
the <var class="var">word</var> portion of a double-quoted ${…} parameter expansion
|
|
and can be used to quote a closing brace or other special character
|
|
(this is part of
|
|
<small class="sc">POSIX</small>
|
|
interpretation 221);
|
|
in later versions, single quotes
|
|
are not special within double-quoted word expansions.
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat43</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>Word expansion errors are considered non-fatal errors that cause the
|
|
current command to fail, even in <small class="sc">POSIX</small> mode
|
|
(the default behavior is to make them fatal errors that cause the shell
|
|
to exit).
|
|
</li><li>When executing a shell function, the loop state (while/until/etc.)
|
|
is not reset, so <code class="code">break</code> or <code class="code">continue</code> in that function will break
|
|
or continue loops in the calling context.
|
|
Bash-4.4 and later reset the loop state to prevent this.
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat44</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>The shell sets up the values used by <code class="env">BASH_ARGV</code> and <code class="env">BASH_ARGC</code>
|
|
so they can expand to the shell’s positional parameters even if extended
|
|
debugging mode is not enabled.
|
|
</li><li>A subshell inherits loops from its parent context, so <code class="code">break</code>
|
|
or <code class="code">continue</code> will cause the subshell to exit.
|
|
Bash-5.0 and later reset the loop state to prevent the exit.
|
|
</li><li>Variable assignments preceding builtins like <code class="code">export</code> and <code class="code">readonly</code>
|
|
that set attributes continue to affect variables with the same
|
|
name in the calling environment even if the shell is not in
|
|
<small class="sc">POSIX</small>
|
|
mode.
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat50 (set using BASH_COMPAT)</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>Bash-5.1 changed the way <code class="code">$RANDOM</code> is generated to introduce slightly
|
|
more randomness.
|
|
If the shell compatibility level is set to 50 or lower, it reverts to
|
|
the method from bash-5.0 and previous versions,
|
|
so seeding the random number generator by assigning a value to
|
|
<code class="env">RANDOM</code> will produce the same sequence as in bash-5.0.
|
|
</li><li>If the command hash table is empty, Bash versions prior to bash-5.1
|
|
printed an informational message to that effect, even when producing
|
|
output that can be reused as input.
|
|
Bash-5.1 suppresses that message when the <samp class="option">-l</samp> option is supplied.
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat51 (set using BASH_COMPAT)</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>The <code class="code">unset</code> builtin will unset the array <code class="code">a</code> given an argument like
|
|
‘<samp class="samp">a[@]</samp>’.
|
|
Bash-5.2 will unset an element with key ‘<samp class="samp">@</samp>’ (associative arrays)
|
|
or remove all the elements without unsetting the array (indexed arrays).
|
|
</li><li>Arithmetic commands ( ((…)) ) and the expressions in an arithmetic for
|
|
statement can be expanded more than once.
|
|
</li><li>Expressions used as arguments to arithmetic operators in the <code class="code">[[</code>
|
|
conditional command can be expanded more than once.
|
|
</li><li>The expressions in substring parameter brace expansion can be
|
|
expanded more than once.
|
|
</li><li>The expressions in the $(( … )) word expansion can be expanded
|
|
more than once.
|
|
</li><li>Arithmetic expressions used as indexed array subscripts can be
|
|
expanded more than once.
|
|
</li><li><code class="code">test -v</code>, when given an argument of ‘<samp class="samp">A[@]</samp>’, where <var class="var">A</var> is
|
|
an existing associative array, will return true if the array has any set
|
|
elements.
|
|
Bash-5.2 will look for and report on a key named ‘<samp class="samp">@</samp>’.
|
|
</li><li>the ${<var class="var">parameter</var>[:]=<var class="var">value</var>} word expansion will return
|
|
<var class="var">value</var>, before any variable-specific transformations have been
|
|
performed (e.g., converting to lowercase).
|
|
Bash-5.2 will return the final value assigned to the variable.
|
|
</li><li>Parsing command substitutions will behave as if extended globbing
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, so that parsing a command substitution containing an extglob
|
|
pattern (say, as part of a shell function) will not fail.
|
|
This assumes the intent is to enable extglob before the command is executed
|
|
and word expansions are performed.
|
|
It will fail at word expansion time if extglob hasn’t been
|
|
enabled by the time the command is executed.
|
|
</li></ul>
|
|
|
|
</dd>
|
|
<dt><code class="code">compat52 (set using BASH_COMPAT)</code></dt>
|
|
<dd><ul class="itemize mark-bullet">
|
|
<li>The <code class="code">test</code> builtin uses its historical algorithm to parse parenthesized
|
|
subexpressions when given five or more arguments.
|
|
</li><li>If the <samp class="option">-p</samp> or <samp class="option">-P</samp> option is supplied to the <code class="code">bind</code> builtin,
|
|
<code class="code">bind</code> treats any arguments remaining after option processing
|
|
as bindable command names, and
|
|
displays any key sequences bound to those commands, instead of treating
|
|
the arguments as key sequences to bind.
|
|
</li><li>Interactive shells will notify the user of completed jobs while sourcing a
|
|
script.
|
|
Newer versions defer notification until script execution completes.
|
|
</li></ul>
|
|
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Job-Control">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Command-Line-Editing" accesskey="n" rel="next">Command Line Editing</a>, Previous: <a href="#Bash-Features" accesskey="p" rel="prev">Bash Features</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Job-Control-1"><span>7 Job Control<a class="copiable-link" href="#Job-Control-1"> ¶</a></span></h2>
|
|
|
|
<p>This chapter discusses what job control is, how it works, and how
|
|
Bash allows you to access its facilities.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Job-Control-Basics" accesskey="1">Job Control Basics</a></li>
|
|
<li><a href="#Job-Control-Builtins" accesskey="2">Job Control Builtins</a></li>
|
|
<li><a href="#Job-Control-Variables" accesskey="3">Job Control Variables</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Job-Control-Basics">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Job-Control-Builtins" accesskey="n" rel="next">Job Control Builtins</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Job-Control-Basics-1"><span>7.1 Job Control Basics<a class="copiable-link" href="#Job-Control-Basics-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-job-control-1"></a>
|
|
<a class="index-entry-id" id="index-foreground"></a>
|
|
<a class="index-entry-id" id="index-background"></a>
|
|
<a class="index-entry-id" id="index-suspending-jobs"></a>
|
|
|
|
<p>Job control
|
|
refers to the ability to selectively stop (suspend)
|
|
the execution of processes and continue (resume)
|
|
their execution at a later point.
|
|
A user typically employs
|
|
this facility via an interactive interface supplied jointly
|
|
by the operating system kernel’s terminal driver and Bash.
|
|
</p>
|
|
<p>The shell associates a <var class="var">job</var> with each pipeline.
|
|
It keeps a
|
|
table of currently executing jobs, which the
|
|
<code class="code">jobs</code> command will display.
|
|
Each job has a <em class="dfn">job number</em>, which <code class="code">jobs</code> displays between brackets.
|
|
Job numbers start at 1.
|
|
When Bash starts a job asynchronously, it prints a line that looks
|
|
like:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">[1] 25647
|
|
</pre></div>
|
|
<p>indicating that this job is job number 1 and that the process <small class="sc">ID</small>
|
|
of the last process in the pipeline associated with this job is
|
|
25647.
|
|
All of the processes in a single pipeline are members of
|
|
the same job.
|
|
Bash uses the <var class="var">job</var> abstraction as the basis for job control.
|
|
</p>
|
|
<p>To facilitate the implementation of the user interface to job control,
|
|
each process has a <em class="dfn">process group <small class="sc">ID</small></em>, and
|
|
the operating system maintains the notion of a current terminal
|
|
process group <small class="sc">ID</small>.
|
|
This terminal process group <small class="sc">ID</small> is associated with the
|
|
<em class="dfn">controlling terminal</em>.
|
|
</p>
|
|
<p>Processes that have the same process group ID are said to be part of
|
|
the same <em class="dfn">process group</em>.
|
|
Members of the foreground process group (processes whose
|
|
process group <small class="sc">ID</small> is equal to the current terminal process group
|
|
<small class="sc">ID</small>) receive keyboard-generated signals such as <code class="code">SIGINT</code>.
|
|
Processes in the foreground process group are said to be
|
|
foreground processes.
|
|
Background processes
|
|
are those whose process group <small class="sc">ID</small> differs from the
|
|
controlling terminal’s;
|
|
such processes are immune to keyboard-generated signals.
|
|
Only foreground processes are allowed to read from or,
|
|
if the user so specifies with
|
|
<code class="code">stty tostop</code>,
|
|
write to the controlling terminal.
|
|
The system sends a
|
|
<code class="code">SIGTTIN</code> (<code class="code">SIGTTOU</code>)
|
|
signal to background processes which attempt to
|
|
read from (write to when <code class="code">tostop</code> is in effect)
|
|
the terminal,
|
|
which, unless caught, suspends the process.
|
|
</p>
|
|
<p>If the operating system on which Bash is running supports
|
|
job control, Bash contains facilities to use it.
|
|
Typing the
|
|
<em class="dfn">suspend</em> character (typically ‘<samp class="samp">^Z</samp>’, Control-Z) while a
|
|
process is running stops that process
|
|
and returns control to Bash.
|
|
Typing the <em class="dfn">delayed suspend</em> character
|
|
(typically ‘<samp class="samp">^Y</samp>’, Control-Y) causes the process to stop
|
|
when it attempts to read input from the terminal,
|
|
and returns control to Bash.
|
|
The user then manipulates the state of
|
|
this job, using
|
|
the <code class="code">bg</code> command to continue it in the background,
|
|
the <code class="code">fg</code> command to continue it in the foreground, or
|
|
the <code class="code">kill</code> command to kill it.
|
|
The suspend character
|
|
takes effect immediately, and has the additional side effect of
|
|
discarding any pending output and typeahead.
|
|
If you want to force a background process to stop, or stop a process
|
|
that’s not associated with your terminal session,
|
|
send it the <code class="code">SIGSTOP</code> signal using <code class="code">kill</code>.
|
|
</p>
|
|
<p>There are a number of ways to refer to a job in the shell.
|
|
The ‘<samp class="samp">%</samp>’ character introduces a <em class="dfn">job specification</em> (jobspec).
|
|
</p>
|
|
<p>Job number <code class="code">n</code> may be referred to as ‘<samp class="samp">%n</samp>’.
|
|
A job may also be referred to
|
|
using a prefix of the name used to start it,
|
|
or using a substring that appears in its command line.
|
|
For example, ‘<samp class="samp">%ce</samp>’ refers
|
|
to a job whose command name begins with ‘<samp class="samp">ce</samp>’.
|
|
Using ‘<samp class="samp">%?ce</samp>’, on the
|
|
other hand, refers to any job containing the string ‘<samp class="samp">ce</samp>’ in
|
|
its command line.
|
|
If the prefix or substring matches more than one job,
|
|
Bash reports an error.
|
|
</p>
|
|
<p>The symbols ‘<samp class="samp">%%</samp>’ and ‘<samp class="samp">%+</samp>’ refer to the shell’s notion of the
|
|
<em class="dfn">current job</em>.
|
|
A single ‘<samp class="samp">%</samp>’ (with no accompanying job specification) also refers
|
|
to the current job.
|
|
‘<samp class="samp">%-</samp>’ refers to the <em class="dfn">previous job</em>.
|
|
When a job starts in the background,
|
|
a job stops while in the foreground,
|
|
or a job is resumed in the background,
|
|
it becomes the current job.
|
|
The job that was the current job becomes the previous job.
|
|
When the current job terminates, the previous job becomes the
|
|
current job.
|
|
If there is only a single job, ‘<samp class="samp">%+</samp>’ and ‘<samp class="samp">%-</samp>’ can both be used
|
|
to refer to that job.
|
|
In output pertaining to jobs (e.g., the output of the <code class="code">jobs</code>
|
|
command), the current job is always marked with a ‘<samp class="samp">+</samp>’, and the
|
|
previous job with a ‘<samp class="samp">-</samp>’.
|
|
</p>
|
|
<p>Simply naming a job can be used to bring it into the foreground:
|
|
‘<samp class="samp">%1</samp>’ is a synonym for ‘<samp class="samp">fg %1</samp>’, bringing job 1 from the
|
|
background into the foreground.
|
|
Similarly, ‘<samp class="samp">%1 &</samp>’ resumes
|
|
job 1 in the background, equivalent to ‘<samp class="samp">bg %1</samp>’.
|
|
</p>
|
|
<p>The shell learns immediately whenever a job changes state.
|
|
Normally, Bash waits until it is about to print a prompt before
|
|
notifying the user about
|
|
changes in a job’s status so as to not interrupt
|
|
any other output,
|
|
though it will notify of changes in a job’s status after a
|
|
foreground command in
|
|
a list completes, before executing the next command in the list.
|
|
If the <samp class="option">-b</samp> option to the <code class="code">set</code> builtin is enabled,
|
|
Bash reports status changes immediately (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
Bash executes any trap on <code class="code">SIGCHLD</code>
|
|
for each child process that terminates.
|
|
</p>
|
|
<p>When a job terminates and Bash notifies the user about it,
|
|
Bash removes the job from the jobs table.
|
|
It will not appear in <code class="code">jobs</code> output, but <code class="code">wait</code> will
|
|
report its exit status, as long as it’s supplied the process ID
|
|
associated with the job as an argument.
|
|
When the table is empty, job numbers start over at 1.
|
|
</p>
|
|
<p>If a user attempts to exit
|
|
Bash while jobs are stopped, (or running, if
|
|
the <code class="code">checkjobs</code> option is enabled – see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), the
|
|
shell prints a warning message, and if the <code class="code">checkjobs</code> option is
|
|
enabled, lists the jobs and their statuses.
|
|
The <code class="code">jobs</code> command may then be used to inspect their status.
|
|
If the user immediately attempts to exit again,
|
|
without an intervening command,
|
|
Bash does not print another warning, and
|
|
terminates any stopped jobs.
|
|
</p>
|
|
<p>When the shell is waiting for a job or process using the <code class="code">wait</code>
|
|
builtin, and job control is enabled, <code class="code">wait</code> will return when the
|
|
job changes state.
|
|
The <samp class="option">-f</samp> option causes <code class="code">wait</code> to wait
|
|
until the job or process terminates before returning.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Job-Control-Builtins">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Job-Control-Variables" accesskey="n" rel="next">Job Control Variables</a>, Previous: <a href="#Job-Control-Basics" accesskey="p" rel="prev">Job Control Basics</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Job-Control-Builtins-1"><span>7.2 Job Control Builtins<a class="copiable-link" href="#Job-Control-Builtins-1"> ¶</a></span></h3>
|
|
|
|
<dl class="table">
|
|
<dt><a id="index-bg"></a><span><code class="code">bg</code><a class="copiable-link" href="#index-bg"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">bg [<var class="var">jobspec</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Resume each suspended job <var class="var">jobspec</var> in the background, as if it
|
|
had been started with ‘<samp class="samp">&</samp>’.
|
|
If <var class="var">jobspec</var> is not supplied, the shell uses its
|
|
notion of the current job.
|
|
<code class="code">bg</code> returns zero unless it is run when job control is not
|
|
enabled, or, when run with job control enabled, any
|
|
<var class="var">jobspec</var> was not found or specifies a job
|
|
that was started without job control.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-fg"></a><span><code class="code">fg</code><a class="copiable-link" href="#index-fg"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">fg [<var class="var">jobspec</var>]
|
|
</pre></div>
|
|
|
|
<p>Resume the job <var class="var">jobspec</var> in the foreground and make it the current job.
|
|
If <var class="var">jobspec</var> is not supplied, <code class="code">fg</code> resumes the current job.
|
|
The return status is that of the command placed into the foreground,
|
|
or non-zero if run when job control is disabled or, when run with
|
|
job control enabled, <var class="var">jobspec</var> does not specify a valid job or
|
|
<var class="var">jobspec</var> specifies a job that was started without job control.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-jobs"></a><span><code class="code">jobs</code><a class="copiable-link" href="#index-jobs"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">jobs [-lnprs] [<var class="var">jobspec</var>]
|
|
jobs -x <var class="var">command</var> [<var class="var">arguments</var>]
|
|
</pre></div>
|
|
|
|
<p>The first form lists the active jobs.
|
|
The options have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-l</code></dt>
|
|
<dd><p>List process <small class="sc">ID</small>s in addition to the normal information.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>Display information only about jobs that have changed status since
|
|
the user was last notified of their status.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-p</code></dt>
|
|
<dd><p>List only the process <small class="sc">ID</small> of the job’s process group leader.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r</code></dt>
|
|
<dd><p>Display only running jobs.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>Display only stopped jobs.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>If <var class="var">jobspec</var> is supplied,
|
|
<code class="code">jobs</code> restricts output to information about that job.
|
|
If <var class="var">jobspec</var> is not supplied, <code class="code">jobs</code> lists the status of all jobs.
|
|
The return status is zero unless an invalid option is encountered
|
|
or an invalid
|
|
<var class="var">jobspec</var>
|
|
is supplied.
|
|
</p>
|
|
<p>If the <samp class="option">-x</samp> option is supplied, <code class="code">jobs</code> replaces any
|
|
<var class="var">jobspec</var> found in <var class="var">command</var> or <var class="var">arguments</var> with the
|
|
corresponding process group <small class="sc">ID</small>, and executes <var class="var">command</var>,
|
|
passing it <var class="var">argument</var>s, returning its exit status.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-kill"></a><span><code class="code">kill</code><a class="copiable-link" href="#index-kill"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">kill [-s <var class="var">sigspec</var>] [-n <var class="var">signum</var>] [-<var class="var">sigspec</var>] <var class="var">id</var> [...]
|
|
kill -l|-L [<var class="var">exit_status</var>]
|
|
</pre></div>
|
|
|
|
<p>Send a signal specified by <var class="var">sigspec</var> or <var class="var">signum</var> to the processes
|
|
named by each <var class="var">id</var>.
|
|
Each <var class="var">id</var> may be a
|
|
job specification <var class="var">jobspec</var> or process <small class="sc">ID</small> <var class="var">pid</var>.
|
|
<var class="var">sigspec</var> is either a case-insensitive signal name such as
|
|
<code class="code">SIGINT</code> (with or without the <code class="code">SIG</code> prefix)
|
|
or a signal number; <var class="var">signum</var> is a signal number.
|
|
If <var class="var">sigspec</var> and <var class="var">signum</var> are not present, <code class="code">kill</code>
|
|
sends <code class="code">SIGTERM</code>.
|
|
</p>
|
|
<p>The <samp class="option">-l</samp> option lists the signal names.
|
|
If any arguments are supplied when <samp class="option">-l</samp> is supplied,
|
|
<code class="code">kill</code> lists the names of the signals corresponding to the arguments,
|
|
and the return status is zero.
|
|
<var class="var">exit_status</var> is a number specifying a signal number or the exit
|
|
status of a process terminated by a signal;
|
|
if it is supplied, <code class="code">kill</code> prints the name of the signal that caused
|
|
the process to terminate.
|
|
<code class="code">kill</code> assumes that process exit statuses are greater than 128;
|
|
anything less than that is a signal number.
|
|
The <samp class="option">-L</samp> option is equivalent to <samp class="option">-l</samp>.
|
|
</p>
|
|
<p>The return status is zero if at least one signal was successfully sent,
|
|
or non-zero if an error occurs or an invalid option is encountered.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-wait"></a><span><code class="code">wait</code><a class="copiable-link" href="#index-wait"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">wait [-fn] [-p <var class="var">varname</var>] [<var class="var">id</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Wait until the child process specified by each <var class="var">id</var> exits and
|
|
return the exit status of the last <var class="var">id</var>.
|
|
Each <var class="var">id</var> may be a process <small class="sc">ID</small> <var class="var">pid</var>
|
|
or a job specification <var class="var">jobspec</var>;
|
|
if a jobspec is supplied, <code class="code">wait</code> waits for all processes in the job.
|
|
</p>
|
|
<p>If no options or <var class="var">id</var>s are supplied,
|
|
<code class="code">wait</code> waits for all running background jobs and
|
|
the last-executed process substitution,
|
|
if its process id is the same as <var class="var">$!</var>,
|
|
and the return status is zero.
|
|
</p>
|
|
<p>If the <samp class="option">-n</samp> option is supplied, <code class="code">wait</code> waits for any one of
|
|
the <var class="var">id</var>s or,
|
|
if no <var class="var">id</var>s are supplied, any job or process substitution,
|
|
to complete and returns its exit status.
|
|
If none of the supplied <var class="var">id</var>s is a child of the shell,
|
|
or if no arguments are supplied and the shell has no unwaited-for children,
|
|
the exit status is 127.
|
|
</p>
|
|
<p>If the <samp class="option">-p</samp> option is supplied, <code class="code">wait</code> assigns
|
|
the process or job identifier of the job
|
|
for which the exit status is returned to the
|
|
variable <var class="var">varname</var> named by the option argument.
|
|
The variable,
|
|
which cannot be readonly,
|
|
will be unset initially, before any assignment.
|
|
This is useful only when used with the <samp class="option">-n</samp> option.
|
|
</p>
|
|
<p>Supplying the <samp class="option">-f</samp> option, when job control is enabled,
|
|
forces <code class="code">wait</code> to wait for each <var class="var">id</var> to terminate before
|
|
returning its status, instead of returning when it changes status.
|
|
If there are no <var class="var">id</var> arguments,
|
|
<code class="code">wait</code> waits until all background processes have terminated.
|
|
</p>
|
|
<p>If none of the <var class="var">id</var>s specify one of the shell’s an active child
|
|
processes, the return status is 127.
|
|
If <code class="code">wait</code> is interrupted by a signal,
|
|
any <var class="var">varname</var> will remain unset,
|
|
and the return status will be greater
|
|
than 128, as described above (see <a class="pxref" href="#Signals">Signals</a>).
|
|
Otherwise, the return status is the exit status of the last <var class="var">id</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-disown"></a><span><code class="code">disown</code><a class="copiable-link" href="#index-disown"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">disown [-ar] [-h] [<var class="var">id</var> ...]
|
|
</pre></div>
|
|
|
|
<p>Without options, remove each <var class="var">id</var> from the table of
|
|
active jobs.
|
|
Each <var class="var">id</var> may be a job specification <var class="var">jobspec</var>
|
|
or a process <small class="sc">ID</small> <var class="var">pid</var>;
|
|
if <var class="var">id</var> is a <var class="var">pid</var>,
|
|
<code class="code">disown</code> uses the job containing <var class="var">pid</var> as <var class="var">jobspec</var>.
|
|
</p>
|
|
<p>If the <samp class="option">-h</samp> option is supplied,
|
|
<code class="code">disown</code> does not remove the jobs corresponding to each <code class="code">id</code>
|
|
from the jobs table,
|
|
but rather marks them so the shell does not send
|
|
<code class="code">SIGHUP</code>
|
|
to the job if the shell receives a
|
|
<code class="code">SIGHUP</code>.
|
|
</p>
|
|
<p>If no <var class="var">id</var> is supplied, the <samp class="option">-a</samp> option means to remove or
|
|
mark all jobs; the <samp class="option">-r</samp> option without an <var class="var">id</var>
|
|
argument removes or marks running jobs.
|
|
If no <var class="var">id</var> is supplied,
|
|
and neither the <samp class="option">-a</samp> nor the <samp class="option">-r</samp> option is supplied,
|
|
<code class="code">disown</code> removes or marks the current job.
|
|
</p>
|
|
<p>The return value is 0 unless an <var class="var">id</var> does not specify a valid job.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-suspend"></a><span><code class="code">suspend</code><a class="copiable-link" href="#index-suspend"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">suspend [-f]
|
|
</pre></div>
|
|
|
|
<p>Suspend the execution of this shell until it receives a
|
|
<code class="code">SIGCONT</code> signal.
|
|
A login shell, or a shell without job control enabled,
|
|
cannot be suspended; the <samp class="option">-f</samp>
|
|
option will override this and force the suspension.
|
|
The return status is 0 unless the shell is a login shell
|
|
or job control is not enabled
|
|
and
|
|
<samp class="option">-f</samp>
|
|
is not supplied.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>When job control is not active, the <code class="code">kill</code> and <code class="code">wait</code>
|
|
builtins do not accept <var class="var">jobspec</var> arguments.
|
|
They must be supplied process <small class="sc">ID</small>s.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Job-Control-Variables">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Job-Control-Builtins" accesskey="p" rel="prev">Job Control Builtins</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Job-Control-Variables-1"><span>7.3 Job Control Variables<a class="copiable-link" href="#Job-Control-Variables-1"> ¶</a></span></h3>
|
|
|
|
<dl class="vtable">
|
|
<dt><a id="index-auto_005fresume"></a><span><code class="code">auto_resume</code><a class="copiable-link" href="#index-auto_005fresume"> ¶</a></span></dt>
|
|
<dd><p>This variable controls how the shell interacts with the user and
|
|
job control.
|
|
If this variable exists then simple commands
|
|
consisting of only a single word,
|
|
without redirections, are treated as candidates for resumption
|
|
of an existing job.
|
|
There is no ambiguity allowed; if there is more than one job
|
|
beginning with or containing the word, then
|
|
this selects the most recently accessed job.
|
|
The name of a stopped job, in this context, is the command line
|
|
used to start it, as displayed by <code class="code">jobs</code>.
|
|
If this variable is set to the value ‘<samp class="samp">exact</samp>’,
|
|
the word must match the name of a stopped job exactly;
|
|
if set to ‘<samp class="samp">substring</samp>’,
|
|
the word needs to match a substring of the name of a stopped job.
|
|
The ‘<samp class="samp">substring</samp>’ value provides functionality
|
|
analogous to the ‘<samp class="samp">%?string</samp>’ job <small class="sc">ID</small> (see <a class="pxref" href="#Job-Control-Basics">Job Control Basics</a>).
|
|
If set to any other value (e.g., ‘<samp class="samp">prefix</samp>’),
|
|
the word must be a prefix of a stopped job’s name;
|
|
this provides functionality analogous to the ‘<samp class="samp">%string</samp>’ job <small class="sc">ID</small>.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<a class="index-entry-id" id="index-Readline_002c-how-to-use"></a>
|
|
|
|
|
|
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Command-Line-Editing">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Using-History-Interactively" accesskey="n" rel="next">Using History Interactively</a>, Previous: <a href="#Job-Control" accesskey="p" rel="prev">Job Control</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Command-Line-Editing-1"><span>8 Command Line Editing<a class="copiable-link" href="#Command-Line-Editing-1"> ¶</a></span></h2>
|
|
|
|
<p>This chapter describes the basic features of the <small class="sc">GNU</small>
|
|
command line editing interface.
|
|
Command line editing is provided by the Readline library, which is
|
|
used by several different programs, including Bash.
|
|
Command line editing is enabled by default when using an interactive shell,
|
|
unless the <samp class="option">--noediting</samp> option is supplied at shell invocation.
|
|
Line editing is also used when using the <samp class="option">-e</samp> option to the
|
|
<code class="code">read</code> builtin command (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
By default, the line editing commands are similar to those of Emacs;
|
|
a vi-style line editing interface is also available.
|
|
Line editing can be enabled at any time using the <samp class="option">-o emacs</samp> or
|
|
<samp class="option">-o vi</samp> options to the <code class="code">set</code> builtin command
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>), or disabled using the <samp class="option">+o emacs</samp> or
|
|
<samp class="option">+o vi</samp> options to <code class="code">set</code>.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Introduction-and-Notation" accesskey="1">Introduction to Line Editing</a></li>
|
|
<li><a href="#Readline-Interaction" accesskey="2">Readline Interaction</a></li>
|
|
<li><a href="#Readline-Init-File" accesskey="3">Readline Init File</a></li>
|
|
<li><a href="#Bindable-Readline-Commands" accesskey="4">Bindable Readline Commands</a></li>
|
|
<li><a href="#Readline-vi-Mode" accesskey="5">Readline vi Mode</a></li>
|
|
<li><a href="#Programmable-Completion" accesskey="6">Programmable Completion</a></li>
|
|
<li><a href="#Programmable-Completion-Builtins" accesskey="7">Programmable Completion Builtins</a></li>
|
|
<li><a href="#A-Programmable-Completion-Example" accesskey="8">A Programmable Completion Example</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Introduction-and-Notation">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Readline-Interaction" accesskey="n" rel="next">Readline Interaction</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Introduction-to-Line-Editing"><span>8.1 Introduction to Line Editing<a class="copiable-link" href="#Introduction-to-Line-Editing"> ¶</a></span></h3>
|
|
|
|
<p>The following paragraphs use Emacs style to
|
|
describe the notation used to represent keystrokes.
|
|
</p>
|
|
<p>The text <kbd class="kbd">C-k</kbd> is read as “Control-K” and describes the character
|
|
produced when the <kbd class="key">k</kbd> key is pressed while the Control key
|
|
is depressed.
|
|
</p>
|
|
<p>The text <kbd class="kbd">M-k</kbd> is read as “Meta-K” and describes the character
|
|
produced when the Meta key (if you have one) is depressed, and the <kbd class="key">k</kbd>
|
|
key is pressed (a <em class="dfn">meta character</em>), then both are released.
|
|
The Meta key is labeled <kbd class="key">ALT</kbd> or <kbd class="key">Option</kbd> on many keyboards.
|
|
On keyboards with two keys labeled <kbd class="key">ALT</kbd> (usually to either side of
|
|
the space bar), the <kbd class="key">ALT</kbd> on the left side is generally set to
|
|
work as a Meta key.
|
|
One of the <kbd class="key">ALT</kbd> keys may also be configured
|
|
as some other modifier, such as a
|
|
Compose key for typing accented characters.
|
|
</p>
|
|
<p>On some keyboards, the Meta key modifier produces characters with
|
|
the eighth bit (0200) set.
|
|
You can use the <code class="code">enable-meta-key</code> variable
|
|
to control whether or not it does this, if the keyboard allows it.
|
|
On many others, the terminal or terminal emulator converts the metafied
|
|
key to a key sequence beginning with <kbd class="key">ESC</kbd> as described in the
|
|
next paragraph.
|
|
</p>
|
|
<p>If you do not have a Meta or <kbd class="key">ALT</kbd> key, or another key working as
|
|
a Meta key, you can generally achieve the latter effect by typing <kbd class="key">ESC</kbd>
|
|
<em class="emph">first</em>, and then typing <kbd class="key">k</kbd>.
|
|
The <kbd class="key">ESC</kbd> character is known as the <em class="dfn">meta prefix</em>).
|
|
</p>
|
|
<p>Either process is known as <em class="dfn">metafying</em> the <kbd class="key">k</kbd> key.
|
|
</p>
|
|
<p>If your Meta key produces a key sequence with the <kbd class="key">ESC</kbd> meta prefix,
|
|
you can make <kbd class="kbd">M-key</kbd> key bindings you specify
|
|
(see <code class="code">Key Bindings</code> in <a class="ref" href="#Readline-Init-File-Syntax">Readline Init File Syntax</a>)
|
|
do the same thing by setting the <code class="code">force-meta-prefix</code> variable.
|
|
</p>
|
|
<p>The text <kbd class="kbd">M-C-k</kbd> is read as “Meta-Control-k” and describes the
|
|
character produced by metafying <kbd class="kbd">C-k</kbd>.
|
|
</p>
|
|
<p>In addition, several keys have their own names.
|
|
Specifically,
|
|
<kbd class="key">DEL</kbd>, <kbd class="key">ESC</kbd>, <kbd class="key">LFD</kbd>, <kbd class="key">SPC</kbd>, <kbd class="key">RET</kbd>, and <kbd class="key">TAB</kbd> all
|
|
stand for themselves when seen in this text, or in an init file
|
|
(see <a class="pxref" href="#Readline-Init-File">Readline Init File</a>).
|
|
If your keyboard lacks a <kbd class="key">LFD</kbd> key, typing <kbd class="key">C-j</kbd> will
|
|
output the appropriate character.
|
|
The <kbd class="key">RET</kbd> key may be labeled <kbd class="key">Return</kbd> or <kbd class="key">Enter</kbd> on
|
|
some keyboards.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Readline-Interaction">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Readline-Init-File" accesskey="n" rel="next">Readline Init File</a>, Previous: <a href="#Introduction-and-Notation" accesskey="p" rel="prev">Introduction to Line Editing</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Readline-Interaction-1"><span>8.2 Readline Interaction<a class="copiable-link" href="#Readline-Interaction-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-interaction_002c-readline"></a>
|
|
|
|
<p>Often during an interactive session you type in a long line of text,
|
|
only to notice that the first word on the line is misspelled.
|
|
The Readline library gives you a set of commands for manipulating the text
|
|
as you type it in, allowing you to just fix your typo, and not forcing
|
|
you to retype the majority of the line.
|
|
Using these editing commands,
|
|
you move the cursor to the place that needs correction, and delete or
|
|
insert the text of the corrections.
|
|
Then, when you are satisfied with the line, you simply press <kbd class="key">RET</kbd>.
|
|
You do not have to be at the
|
|
end of the line to press <kbd class="key">RET</kbd>; the entire line is accepted
|
|
regardless of the location of the cursor within the line.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Readline-Bare-Essentials" accesskey="1">Readline Bare Essentials</a></li>
|
|
<li><a href="#Readline-Movement-Commands" accesskey="2">Readline Movement Commands</a></li>
|
|
<li><a href="#Readline-Killing-Commands" accesskey="3">Readline Killing Commands</a></li>
|
|
<li><a href="#Readline-Arguments" accesskey="4">Readline Arguments</a></li>
|
|
<li><a href="#Searching" accesskey="5">Searching for Commands in the History</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Readline-Bare-Essentials">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Readline-Movement-Commands" accesskey="n" rel="next">Readline Movement Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Readline-Bare-Essentials-1"><span>8.2.1 Readline Bare Essentials<a class="copiable-link" href="#Readline-Bare-Essentials-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-notation_002c-readline"></a>
|
|
<a class="index-entry-id" id="index-command-editing"></a>
|
|
<a class="index-entry-id" id="index-editing-command-lines"></a>
|
|
|
|
<p>In order to enter characters into the line, simply type them.
|
|
The typed
|
|
character appears where the cursor was, and then the cursor moves one
|
|
space to the right.
|
|
If you mistype a character, you can use your
|
|
erase character to back up and delete the mistyped character.
|
|
</p>
|
|
<p>Sometimes you may mistype a character, and
|
|
not notice the error until you have typed several other characters.
|
|
In that case, you can type <kbd class="kbd">C-b</kbd> to move the cursor to the left,
|
|
and then correct your mistake.
|
|
Afterwards, you can move the cursor to the right with <kbd class="kbd">C-f</kbd>.
|
|
</p>
|
|
<p>When you add text in the middle of a line, you will notice that characters
|
|
to the right of the cursor are “pushed over” to make room for the text
|
|
that you have inserted.
|
|
Likewise, when you delete text behind the cursor,
|
|
characters to the right of the cursor are “pulled back” to fill in the
|
|
blank space created by the removal of the text.
|
|
These are the bare
|
|
essentials for editing the text of an input line:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><kbd class="kbd">C-b</kbd></dt>
|
|
<dd><p>Move back one character.
|
|
</p></dd>
|
|
<dt><kbd class="kbd">C-f</kbd></dt>
|
|
<dd><p>Move forward one character.
|
|
</p></dd>
|
|
<dt><kbd class="key">DEL</kbd> or <kbd class="key">Backspace</kbd></dt>
|
|
<dd><p>Delete the character to the left of the cursor.
|
|
</p></dd>
|
|
<dt><kbd class="kbd">C-d</kbd></dt>
|
|
<dd><p>Delete the character underneath the cursor.
|
|
</p></dd>
|
|
<dt>Printing characters<!-- /@w --></dt>
|
|
<dd><p>Insert the character into the line at the cursor.
|
|
</p></dd>
|
|
<dt><kbd class="kbd">C-_</kbd> or <kbd class="kbd">C-x C-u</kbd></dt>
|
|
<dd><p>Undo the last editing command.
|
|
You can undo all the way back to an empty line.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Depending on your configuration, the <kbd class="key">Backspace</kbd> key might be set to
|
|
delete the character to the left of the cursor and the <kbd class="key">DEL</kbd> key set
|
|
to delete the character underneath the cursor, like <kbd class="kbd">C-d</kbd>, rather
|
|
than the character to the left of the cursor.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Readline-Movement-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Readline-Killing-Commands" accesskey="n" rel="next">Readline Killing Commands</a>, Previous: <a href="#Readline-Bare-Essentials" accesskey="p" rel="prev">Readline Bare Essentials</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Readline-Movement-Commands-1"><span>8.2.2 Readline Movement Commands<a class="copiable-link" href="#Readline-Movement-Commands-1"> ¶</a></span></h4>
|
|
|
|
<p>The above table describes the most basic keystrokes that you need
|
|
in order to do editing of the input line.
|
|
For your convenience, many other commands are available in
|
|
addition to <kbd class="kbd">C-b</kbd>, <kbd class="kbd">C-f</kbd>, <kbd class="kbd">C-d</kbd>, and <kbd class="key">DEL</kbd>.
|
|
Here are some commands for moving more rapidly within the line.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><kbd class="kbd">C-a</kbd></dt>
|
|
<dd><p>Move to the start of the line.
|
|
</p></dd>
|
|
<dt><kbd class="kbd">C-e</kbd></dt>
|
|
<dd><p>Move to the end of the line.
|
|
</p></dd>
|
|
<dt><kbd class="kbd">M-f</kbd></dt>
|
|
<dd><p>Move forward a word, where a word is composed of letters and digits.
|
|
</p></dd>
|
|
<dt><kbd class="kbd">M-b</kbd></dt>
|
|
<dd><p>Move backward a word.
|
|
</p></dd>
|
|
<dt><kbd class="kbd">C-l</kbd></dt>
|
|
<dd><p>Clear the screen, reprinting the current line at the top.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Notice how <kbd class="kbd">C-f</kbd> moves forward a character, while <kbd class="kbd">M-f</kbd> moves
|
|
forward a word.
|
|
It is a loose convention that control keystrokes
|
|
operate on characters while meta keystrokes operate on words.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Readline-Killing-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Readline-Arguments" accesskey="n" rel="next">Readline Arguments</a>, Previous: <a href="#Readline-Movement-Commands" accesskey="p" rel="prev">Readline Movement Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Readline-Killing-Commands-1"><span>8.2.3 Readline Killing Commands<a class="copiable-link" href="#Readline-Killing-Commands-1"> ¶</a></span></h4>
|
|
|
|
<a class="index-entry-id" id="index-killing-text"></a>
|
|
<a class="index-entry-id" id="index-yanking-text"></a>
|
|
|
|
<p><em class="dfn">Killing</em> text means to delete the text from the line, but to save
|
|
it away for later use, usually by <em class="dfn">yanking</em> (re-inserting)
|
|
it back into the line.
|
|
(“Cut” and “paste” are more recent jargon for “kill” and “yank”.)
|
|
</p>
|
|
<p>If the description for a command says that it “kills” text, then you can
|
|
be sure that you can get the text back in a different (or the same)
|
|
place later.
|
|
</p>
|
|
<p>When you use a kill command, the text is saved in a <em class="dfn">kill-ring</em>.
|
|
Any number of consecutive kills save all of the killed text together, so
|
|
that when you yank it back, you get it all.
|
|
The kill ring is not line specific; the text that you killed on a previously
|
|
typed line is available to be yanked back later, when you are typing
|
|
another line.
|
|
<a class="index-entry-id" id="index-kill-ring"></a>
|
|
</p>
|
|
<p>Here is the list of commands for killing text.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><kbd class="kbd">C-k</kbd></dt>
|
|
<dd><p>Kill the text from the current cursor position to the end of the line.
|
|
</p>
|
|
</dd>
|
|
<dt><kbd class="kbd">M-d</kbd></dt>
|
|
<dd><p>Kill from the cursor to the end of the current word, or, if between
|
|
words, to the end of the next word.
|
|
Word boundaries are the same as those used by <kbd class="kbd">M-f</kbd>.
|
|
</p>
|
|
</dd>
|
|
<dt><kbd class="kbd">M-<kbd class="key">DEL</kbd></kbd></dt>
|
|
<dd><p>Kill from the cursor to the start of the current word, or, if between
|
|
words, to the start of the previous word.
|
|
Word boundaries are the same as those used by <kbd class="kbd">M-b</kbd>.
|
|
</p>
|
|
</dd>
|
|
<dt><kbd class="kbd">C-w</kbd></dt>
|
|
<dd><p>Kill from the cursor to the previous whitespace.
|
|
This is different than
|
|
<kbd class="kbd">M-<kbd class="key">DEL</kbd></kbd> because the word boundaries differ.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Here is how to <em class="dfn">yank</em> the text back into the line. Yanking
|
|
means to copy the most-recently-killed text from the kill buffer
|
|
into the line at the current cursor position.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><kbd class="kbd">C-y</kbd></dt>
|
|
<dd><p>Yank the most recently killed text back into the buffer at the cursor.
|
|
</p>
|
|
</dd>
|
|
<dt><kbd class="kbd">M-y</kbd></dt>
|
|
<dd><p>Rotate the kill-ring, and yank the new top.
|
|
You can only do this if the prior command is <kbd class="kbd">C-y</kbd> or <kbd class="kbd">M-y</kbd>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Readline-Arguments">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Searching" accesskey="n" rel="next">Searching for Commands in the History</a>, Previous: <a href="#Readline-Killing-Commands" accesskey="p" rel="prev">Readline Killing Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Readline-Arguments-1"><span>8.2.4 Readline Arguments<a class="copiable-link" href="#Readline-Arguments-1"> ¶</a></span></h4>
|
|
|
|
<p>You can pass numeric arguments to Readline commands.
|
|
Sometimes the
|
|
argument acts as a repeat count, other times it is the <i class="i">sign</i> of the
|
|
argument that is significant.
|
|
If you pass a negative argument to a
|
|
command which normally acts in a forward direction, that command will
|
|
act in a backward direction.
|
|
For example, to kill text back to the
|
|
start of the line, you might type ‘<samp class="samp">M-- C-k</samp>’.
|
|
</p>
|
|
<p>The general way to pass numeric arguments to a command is to type
|
|
the Meta key and then digits (“meta digits”)
|
|
before the command.
|
|
If the first “digit” typed is a minus
|
|
sign (‘<samp class="samp">-</samp>’), then the sign of the argument will be negative.
|
|
Once you have typed one meta digit to get the argument started, you can
|
|
type the remainder of the digits, and then the command.
|
|
For example, to give
|
|
the <kbd class="kbd">C-d</kbd> command an argument of 10, you could type ‘<samp class="samp">M-1 0 C-d</samp>’,
|
|
which will delete the next ten characters on the input line.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Searching">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Readline-Arguments" accesskey="p" rel="prev">Readline Arguments</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Searching-for-Commands-in-the-History"><span>8.2.5 Searching for Commands in the History<a class="copiable-link" href="#Searching-for-Commands-in-the-History"> ¶</a></span></h4>
|
|
|
|
<p>Readline provides commands for searching through the command history
|
|
(see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>)
|
|
for lines containing a specified string.
|
|
There are two search modes: <em class="dfn">incremental</em> and <em class="dfn">non-incremental</em>.
|
|
</p>
|
|
<p>Incremental searches begin before the user has finished typing the
|
|
search string.
|
|
As each character of the search string is typed, Readline displays
|
|
the next entry from the history matching the string typed so far.
|
|
An incremental search requires only as many characters as needed to
|
|
find the desired history entry.
|
|
When using emacs editing mode, type <kbd class="kbd">C-r</kbd>
|
|
to search backward in the history for a particular string.
|
|
Typing <kbd class="kbd">C-s</kbd> searches forward through the history.
|
|
The characters present in the value of the <code class="code">isearch-terminators</code> variable
|
|
are used to terminate an incremental search.
|
|
If that variable has not been assigned a value, the <kbd class="key">ESC</kbd> and
|
|
<kbd class="kbd">C-j</kbd> characters terminate an incremental search.
|
|
<kbd class="kbd">C-g</kbd> aborts an incremental search and restores the original line.
|
|
When the search is terminated, the history entry containing the
|
|
search string becomes the current line.
|
|
</p>
|
|
<p>To find other matching entries in the history list, type <kbd class="kbd">C-r</kbd> or
|
|
<kbd class="kbd">C-s</kbd> as appropriate.
|
|
This searches backward or forward in the history for the next
|
|
entry matching the search string typed so far.
|
|
Any other key sequence bound to a Readline command terminates
|
|
the search and executes that command.
|
|
For instance, a <kbd class="key">RET</kbd> terminates the search and accepts
|
|
the line, thereby executing the command from the history list.
|
|
A movement command will terminate the search, make the last line found
|
|
the current line, and begin editing.
|
|
</p>
|
|
<p>Readline remembers the last incremental search string.
|
|
If two <kbd class="kbd">C-r</kbd>s are typed without any intervening characters defining
|
|
a new search string, Readline uses any remembered search string.
|
|
</p>
|
|
<p>Non-incremental searches read the entire search string before starting
|
|
to search for matching history entries.
|
|
The search string may be typed by the user or be part of the contents of
|
|
the current line.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Readline-Init-File">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bindable-Readline-Commands" accesskey="n" rel="next">Bindable Readline Commands</a>, Previous: <a href="#Readline-Interaction" accesskey="p" rel="prev">Readline Interaction</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Readline-Init-File-1"><span>8.3 Readline Init File<a class="copiable-link" href="#Readline-Init-File-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-initialization-file_002c-readline"></a>
|
|
|
|
<p>Although the Readline library comes with a set of Emacs-like
|
|
keybindings installed by default, it is possible to use a different set
|
|
of keybindings.
|
|
Any user can customize programs that use Readline by putting
|
|
commands in an <em class="dfn">inputrc</em> file, conventionally in their home directory.
|
|
The name of this file is taken from the value of the
|
|
shell variable <code class="env">INPUTRC</code>.
|
|
If that variable is unset, the default is <samp class="file">~/.inputrc</samp>.
|
|
If that file does not exist or cannot be read, Readline looks for
|
|
<samp class="file">/etc/inputrc</samp>.
|
|
The <code class="code">bind</code><!-- /@w --> builtin command can also be used to set Readline
|
|
keybindings and variables.
|
|
See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>.
|
|
</p>
|
|
<p>When a program that uses the Readline library starts up, Readline reads
|
|
the init file and sets any variables and key bindings it contains.
|
|
</p>
|
|
<p>In addition, the <code class="code">C-x C-r</code> command re-reads this init file, thus
|
|
incorporating any changes that you might have made to it.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Readline-Init-File-Syntax" accesskey="1">Readline Init File Syntax</a></li>
|
|
<li><a href="#Conditional-Init-Constructs" accesskey="2">Conditional Init Constructs</a></li>
|
|
<li><a href="#Sample-Init-File" accesskey="3">Sample Init File</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Readline-Init-File-Syntax">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Conditional-Init-Constructs" accesskey="n" rel="next">Conditional Init Constructs</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Readline-Init-File-Syntax-1"><span>8.3.1 Readline Init File Syntax<a class="copiable-link" href="#Readline-Init-File-Syntax-1"> ¶</a></span></h4>
|
|
|
|
<p>There are only a few basic constructs allowed in the
|
|
Readline init file.
|
|
Blank lines are ignored.
|
|
Lines beginning with a ‘<samp class="samp">#</samp>’ are comments.
|
|
Lines beginning with a ‘<samp class="samp">$</samp>’ indicate conditional
|
|
constructs (see <a class="pxref" href="#Conditional-Init-Constructs">Conditional Init Constructs</a>).
|
|
Other lines denote variable settings and key bindings.
|
|
</p>
|
|
<dl class="table">
|
|
<dt>Variable Settings</dt>
|
|
<dd><p>You can modify the run-time behavior of Readline by
|
|
altering the values of variables in Readline
|
|
using the <code class="code">set</code> command within the init file.
|
|
The syntax is simple:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">set <var class="var">variable</var> <var class="var">value</var>
|
|
</pre></div>
|
|
|
|
<p>Here, for example, is how to
|
|
change from the default Emacs-like key binding to use
|
|
<code class="code">vi</code> line editing commands:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">set editing-mode vi
|
|
</pre></div>
|
|
|
|
<p>Variable names and values, where appropriate, are recognized without
|
|
regard to case.
|
|
Unrecognized variable names are ignored.
|
|
</p>
|
|
<p>Boolean variables (those that can be set to on or off) are set to on if
|
|
the value is null or empty, <var class="var">on</var> (case-insensitive), or 1.
|
|
Any other value results in the variable being set to off.
|
|
</p>
|
|
<p>The <code class="code">bind -V</code><!-- /@w --> command lists the current Readline variable names
|
|
and values. See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>.
|
|
</p>
|
|
<p>A great deal of run-time behavior is changeable with the following
|
|
variables.
|
|
</p>
|
|
<a class="index-entry-id" id="index-variables_002c-readline"></a>
|
|
<dl class="table">
|
|
<dt><a id="index-active_002dregion_002dstart_002dcolor"></a><span><code class="code">active-region-start-color</code><a class="copiable-link" href="#index-active_002dregion_002dstart_002dcolor"> ¶</a></span></dt>
|
|
<dd><p>A string variable that controls the text color and background when displaying
|
|
the text in the active region (see the description of
|
|
<code class="code">enable-active-region</code> below).
|
|
This string must not take up any physical character positions on the display,
|
|
so it should consist only of terminal escape sequences.
|
|
It is output to the terminal before displaying the text in the active region.
|
|
This variable is reset to the default value whenever the terminal type changes.
|
|
The default value is the string that puts the terminal in standout mode,
|
|
as obtained from the terminal’s terminfo description.
|
|
A sample value might be ‘<samp class="samp">\e[01;33m</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-active_002dregion_002dend_002dcolor"></a><span><code class="code">active-region-end-color</code><a class="copiable-link" href="#index-active_002dregion_002dend_002dcolor"> ¶</a></span></dt>
|
|
<dd><p>A string variable that “undoes”
|
|
the effects of <code class="code">active-region-start-color</code>
|
|
and restores “normal”
|
|
terminal display appearance after displaying text in the active region.
|
|
This string must not take up any physical character positions on the display,
|
|
so it should consist only of terminal escape sequences.
|
|
It is output to the terminal after displaying the text in the active region.
|
|
This variable is reset to the default value whenever the terminal type changes.
|
|
The default value is the string that restores the terminal from standout mode,
|
|
as obtained from the terminal’s terminfo description.
|
|
A sample value might be ‘<samp class="samp">\e[0m</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-bell_002dstyle"></a><span><code class="code">bell-style</code><a class="copiable-link" href="#index-bell_002dstyle"> ¶</a></span></dt>
|
|
<dd><p>Controls what happens when Readline wants to ring the terminal bell.
|
|
If set to ‘<samp class="samp">none</samp>’, Readline never rings the bell.
|
|
If set to ‘<samp class="samp">visible</samp>’, Readline uses a visible bell if one is available.
|
|
If set to ‘<samp class="samp">audible</samp>’ (the default), Readline attempts to ring
|
|
the terminal’s bell.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-bind_002dtty_002dspecial_002dchars"></a><span><code class="code">bind-tty-special-chars</code><a class="copiable-link" href="#index-bind_002dtty_002dspecial_002dchars"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’ (the default), Readline attempts to bind the control
|
|
characters that are
|
|
treated specially by the kernel’s terminal driver to their
|
|
Readline equivalents.
|
|
These override the default Readline bindings described here.
|
|
Type ‘<samp class="samp">stty -a</samp>’ at a Bash prompt to see your current terminal settings,
|
|
including the special control characters (usually <code class="code">cchars</code>).
|
|
This binding takes place on each call to <code class="code">readline()</code>,
|
|
so changes made by
|
|
‘<samp class="samp">stty</samp>’
|
|
can take effect.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-blink_002dmatching_002dparen"></a><span><code class="code">blink-matching-paren</code><a class="copiable-link" href="#index-blink_002dmatching_002dparen"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline attempts to briefly move the cursor to an
|
|
opening parenthesis when a closing parenthesis is inserted.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-colored_002dcompletion_002dprefix"></a><span><code class="code">colored-completion-prefix</code><a class="copiable-link" href="#index-colored_002dcompletion_002dprefix"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, when listing completions, Readline displays the
|
|
common prefix of the set of possible completions using a different color.
|
|
The color definitions are taken from the value of the <code class="env">LS_COLORS</code>
|
|
environment variable.
|
|
If there is a color definition in <code class="env">LS_COLORS</code> for the custom suffix
|
|
‘<samp class="samp">readline-colored-completion-prefix</samp>’, Readline uses this color for
|
|
the common prefix instead of its default.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-colored_002dstats"></a><span><code class="code">colored-stats</code><a class="copiable-link" href="#index-colored_002dstats"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline displays possible completions using different
|
|
colors to indicate their file type.
|
|
The color definitions are taken from the value of the <code class="env">LS_COLORS</code>
|
|
environment variable.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-comment_002dbegin"></a><span><code class="code">comment-begin</code><a class="copiable-link" href="#index-comment_002dbegin"> ¶</a></span></dt>
|
|
<dd><p>The string to insert at the beginning of the line by the
|
|
<code class="code">insert-comment</code> command.
|
|
The default value is <code class="code">"#"</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-completion_002ddisplay_002dwidth"></a><span><code class="code">completion-display-width</code><a class="copiable-link" href="#index-completion_002ddisplay_002dwidth"> ¶</a></span></dt>
|
|
<dd><p>The number of screen columns used to display possible matches
|
|
when performing completion.
|
|
The value is ignored if it is less than 0 or greater than the terminal
|
|
screen width.
|
|
A value of 0 causes matches to be displayed one per line.
|
|
The default value is -1.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-completion_002dignore_002dcase"></a><span><code class="code">completion-ignore-case</code><a class="copiable-link" href="#index-completion_002dignore_002dcase"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline performs filename matching and completion
|
|
in a case-insensitive fashion.
|
|
The default value is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-completion_002dmap_002dcase"></a><span><code class="code">completion-map-case</code><a class="copiable-link" href="#index-completion_002dmap_002dcase"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, and <var class="var">completion-ignore-case</var> is enabled, Readline
|
|
treats hyphens (‘<samp class="samp">-</samp>’) and underscores (‘<samp class="samp">_</samp>’) as equivalent when
|
|
performing case-insensitive filename matching and completion.
|
|
The default value is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-completion_002dprefix_002ddisplay_002dlength"></a><span><code class="code">completion-prefix-display-length</code><a class="copiable-link" href="#index-completion_002dprefix_002ddisplay_002dlength"> ¶</a></span></dt>
|
|
<dd><p>The maximum
|
|
length in characters of the common prefix of a list of possible
|
|
completions that is displayed without modification.
|
|
When set to a value greater than zero, Readline
|
|
replaces common prefixes longer than this value
|
|
with an ellipsis when displaying possible completions.
|
|
If a completion begins with a period,
|
|
and Readline is completing filenames,
|
|
it uses three underscores instead of an ellipsis.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-completion_002dquery_002ditems"></a><span><code class="code">completion-query-items</code><a class="copiable-link" href="#index-completion_002dquery_002ditems"> ¶</a></span></dt>
|
|
<dd><p>The number of possible completions that determines when the user is asked
|
|
whether the list of possibilities should be displayed.
|
|
If the number of possible completions is greater than
|
|
or equal to this value,
|
|
Readline asks whether or not the user wishes to view them;
|
|
otherwise, Readline simply lists the completions.
|
|
This variable must be set to an integer value greater than or equal to zero.
|
|
A zero value means Readline should never ask; negative
|
|
values are treated as zero.
|
|
The default limit is <code class="code">100</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-convert_002dmeta"></a><span><code class="code">convert-meta</code><a class="copiable-link" href="#index-convert_002dmeta"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline converts characters it reads
|
|
that have the eighth bit set to an <small class="sc">ASCII</small> key sequence by
|
|
clearing the eighth bit and prefixing an <kbd class="key">ESC</kbd> character,
|
|
converting them to a meta-prefixed key sequence.
|
|
The default value is ‘<samp class="samp">on</samp>’, but Readline sets it to ‘<samp class="samp">off</samp>’
|
|
if the locale contains
|
|
characters whose encodings may include bytes with the eighth bit set.
|
|
This variable is dependent on the <code class="code">LC_CTYPE</code> locale category, and
|
|
may change if the locale changes.
|
|
This variable also affects key bindings;
|
|
see the description of <code class="code">force-meta-prefix</code> below.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-disable_002dcompletion"></a><span><code class="code">disable-completion</code><a class="copiable-link" href="#index-disable_002dcompletion"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">On</samp>’, Readline inhibits word completion.
|
|
Completion characters are inserted into the line as if they
|
|
had been mapped to <code class="code">self-insert</code>.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-echo_002dcontrol_002dcharacters"></a><span><code class="code">echo-control-characters</code><a class="copiable-link" href="#index-echo_002dcontrol_002dcharacters"> ¶</a></span></dt>
|
|
<dd><p>When set to ‘<samp class="samp">on</samp>’, on operating systems that indicate they support it,
|
|
Readline echoes a character corresponding to a signal generated from the
|
|
keyboard.
|
|
The default is ‘<samp class="samp">on</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-editing_002dmode"></a><span><code class="code">editing-mode</code><a class="copiable-link" href="#index-editing_002dmode"> ¶</a></span></dt>
|
|
<dd><p>The <code class="code">editing-mode</code> variable controls the default set of
|
|
key bindings.
|
|
By default, Readline starts up in emacs editing mode, where
|
|
the keystrokes are most similar to Emacs.
|
|
This variable can be set to either ‘<samp class="samp">emacs</samp>’ or ‘<samp class="samp">vi</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-emacs_002dmode_002dstring"></a><span><code class="code">emacs-mode-string</code><a class="copiable-link" href="#index-emacs_002dmode_002dstring"> ¶</a></span></dt>
|
|
<dd><p>If the <var class="var">show-mode-in-prompt</var> variable is enabled,
|
|
this string is displayed immediately before the last line of the primary
|
|
prompt when emacs editing mode is active.
|
|
The value is expanded like a
|
|
key binding, so the standard set of meta- and control- prefixes and
|
|
backslash escape sequences is available.
|
|
The ‘<samp class="samp">\1</samp>’ and ‘<samp class="samp">\2</samp>’ escapes begin and end sequences of
|
|
non-printing characters, which can be used to embed a terminal control
|
|
sequence into the mode string.
|
|
The default is ‘<samp class="samp">@</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-enable_002dactive_002dregion-The"></a><span><code class="code">enable-active-region</code><a class="copiable-link" href="#index-enable_002dactive_002dregion-The"> ¶</a></span></dt>
|
|
<dd><p><em class="dfn">point</em> is the current cursor position, and <em class="dfn">mark</em> refers to a
|
|
saved cursor position (see <a class="pxref" href="#Commands-For-Moving">Commands For Moving</a>).
|
|
The text between the point and mark is referred to as the <em class="dfn">region</em>.
|
|
When this variable is set to ‘<samp class="samp">On</samp>’, Readline allows certain commands
|
|
to designate the region as <em class="dfn">active</em>.
|
|
When the region is active, Readline highlights the text in the region using
|
|
the value of the <code class="code">active-region-start-color</code>, which defaults to the
|
|
string that enables the terminal’s standout mode.
|
|
The active region shows the text inserted by bracketed-paste and any
|
|
matching text found by incremental and non-incremental history searches.
|
|
The default is ‘<samp class="samp">On</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-enable_002dbracketed_002dpaste"></a><span><code class="code">enable-bracketed-paste</code><a class="copiable-link" href="#index-enable_002dbracketed_002dpaste"> ¶</a></span></dt>
|
|
<dd><p>When set to ‘<samp class="samp">On</samp>’, Readline configures the terminal to insert each
|
|
paste into the editing buffer as a single string of characters, instead
|
|
of treating each character as if it had been read from the keyboard.
|
|
This is called putting the terminal into <em class="dfn">bracketed paste mode</em>;
|
|
it prevents Readline from executing any editing commands bound
|
|
to key sequences appearing in the pasted text.
|
|
The default is ‘<samp class="samp">On</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-enable_002dkeypad"></a><span><code class="code">enable-keypad</code><a class="copiable-link" href="#index-enable_002dkeypad"> ¶</a></span></dt>
|
|
<dd><p>When set to ‘<samp class="samp">on</samp>’, Readline tries to enable the application
|
|
keypad when it is called.
|
|
Some systems need this to enable the arrow keys.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-enable_002dmeta_002dkey"></a><span><code class="code">enable-meta-key</code><a class="copiable-link" href="#index-enable_002dmeta_002dkey"> ¶</a></span></dt>
|
|
<dd><p>When set to ‘<samp class="samp">on</samp>’, Readline tries to enable any meta
|
|
modifier key the terminal claims to support when it is called.
|
|
On many terminals, the Meta key is used to send eight-bit characters;
|
|
this variable checks for the terminal capability that indicates the
|
|
terminal can enable and disable a mode that sets the eighth bit of a
|
|
character (0200) if the Meta key is held down when the character is
|
|
typed (a meta character).
|
|
The default is ‘<samp class="samp">on</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-expand_002dtilde"></a><span><code class="code">expand-tilde</code><a class="copiable-link" href="#index-expand_002dtilde"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline attempts tilde expansion when it
|
|
attempts word completion.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-force_002dmeta_002dprefix"></a><span><code class="code">force-meta-prefix</code><a class="copiable-link" href="#index-force_002dmeta_002dprefix"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline modifies its behavior when binding key
|
|
sequences containing <kbd class="kbd">\M-</kbd> or <code class="code">Meta-</code>
|
|
(see <code class="code">Key Bindings</code> in <a class="ref" href="#Readline-Init-File-Syntax">Readline Init File Syntax</a>)
|
|
by converting a key sequence of the form
|
|
<kbd class="kbd">\M-</kbd><var class="var">C</var> or <code class="code">Meta-</code><var class="var">C</var> to the two-character sequence
|
|
<kbd class="kbd">ESC</kbd> <var class="var">C</var> (adding the meta prefix).
|
|
If <code class="code">force-meta-prefix</code> is set to ‘<samp class="samp">off</samp>’ (the default),
|
|
Readline uses the value of the <code class="code">convert-meta</code> variable to determine
|
|
whether to perform this conversion:
|
|
if <code class="code">convert-meta</code> is ‘<samp class="samp">on</samp>’,
|
|
Readline performs the conversion described above;
|
|
if it is ‘<samp class="samp">off</samp>’, Readline converts <var class="var">C</var> to a meta character by
|
|
setting the eighth bit (0200).
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dpreserve_002dpoint"></a><span><code class="code">history-preserve-point</code><a class="copiable-link" href="#index-history_002dpreserve_002dpoint"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, the history code attempts to place the point (the
|
|
current cursor position) at the
|
|
same location on each history line retrieved with <code class="code">previous-history</code>
|
|
or <code class="code">next-history</code>.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dsize"></a><span><code class="code">history-size</code><a class="copiable-link" href="#index-history_002dsize"> ¶</a></span></dt>
|
|
<dd><p>Set the maximum number of history entries saved in the history list.
|
|
If set to zero, any existing history entries are deleted and no new entries
|
|
are saved.
|
|
If set to a value less than zero, the number of history entries is not
|
|
limited.
|
|
By default, Bash sets the maximum number of history entries to
|
|
the value of the <code class="code">HISTSIZE</code> shell variable.
|
|
If you try to set <var class="var">history-size</var> to a non-numeric value,
|
|
the maximum number of history entries will be set to 500.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-horizontal_002dscroll_002dmode"></a><span><code class="code">horizontal-scroll-mode</code><a class="copiable-link" href="#index-horizontal_002dscroll_002dmode"> ¶</a></span></dt>
|
|
<dd><p>Setting this variable to ‘<samp class="samp">on</samp>’ means that the text of the lines
|
|
being edited will scroll horizontally on a single screen line when
|
|
the lines are longer than the width of the screen, instead of wrapping
|
|
onto a new screen line.
|
|
This variable is automatically set to ‘<samp class="samp">on</samp>’ for terminals of height 1.
|
|
By default, this variable is set to ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a class="index-entry-id" id="index-meta_002dflag"></a>
|
|
<a id="index-input_002dmeta"></a><span><code class="code">input-meta</code><a class="copiable-link" href="#index-input_002dmeta"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline enables eight-bit input (that is, it
|
|
does not clear the eighth bit in the characters it reads),
|
|
regardless of what the terminal claims it can support.
|
|
The default value is ‘<samp class="samp">off</samp>’, but Readline sets it to ‘<samp class="samp">on</samp>’
|
|
if the locale contains characters whose encodings may include bytes
|
|
with the eighth bit set.
|
|
This variable is dependent on the <code class="code">LC_CTYPE</code> locale category, and
|
|
its value may change if the locale changes.
|
|
The name <code class="code">meta-flag</code> is a synonym for <code class="code">input-meta</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-isearch_002dterminators"></a><span><code class="code">isearch-terminators</code><a class="copiable-link" href="#index-isearch_002dterminators"> ¶</a></span></dt>
|
|
<dd><p>The string of characters that should terminate an incremental search without
|
|
subsequently executing the character as a command (see <a class="pxref" href="#Searching">Searching for Commands in the History</a>).
|
|
If this variable has not been given a value, the characters <kbd class="key">ESC</kbd> and
|
|
<kbd class="kbd">C-j</kbd> terminate an incremental search.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-keymap"></a><span><code class="code">keymap</code><a class="copiable-link" href="#index-keymap"> ¶</a></span></dt>
|
|
<dd><p>Sets Readline’s idea of the current keymap for key binding commands.
|
|
Built-in <code class="code">keymap</code> names are
|
|
<code class="code">emacs</code>,
|
|
<code class="code">emacs-standard</code>,
|
|
<code class="code">emacs-meta</code>,
|
|
<code class="code">emacs-ctlx</code>,
|
|
<code class="code">vi</code>,
|
|
<code class="code">vi-move</code>,
|
|
<code class="code">vi-command</code>, and
|
|
<code class="code">vi-insert</code>.
|
|
<code class="code">vi</code> is equivalent to <code class="code">vi-command</code> (<code class="code">vi-move</code> is also a
|
|
synonym); <code class="code">emacs</code> is equivalent to <code class="code">emacs-standard</code>.
|
|
Applications may add additional names.
|
|
The default value is <code class="code">emacs</code>;
|
|
the value of the <code class="code">editing-mode</code> variable also affects the
|
|
default keymap.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">keyseq-timeout</code></dt>
|
|
<dd><p>Specifies the duration Readline will wait for a character when
|
|
reading an ambiguous key sequence
|
|
(one that can form a complete key sequence using the input read so far,
|
|
or can take additional input to complete a longer key sequence).
|
|
If Readline doesn’t receive any input within the timeout, it uses the
|
|
shorter but complete key sequence.
|
|
Readline uses this value to determine whether or not input is
|
|
available on the current input source (<code class="code">rl_instream</code> by default).
|
|
The value is specified in milliseconds, so a value of 1000 means that
|
|
Readline will wait one second for additional input.
|
|
If this variable is set to a value less than or equal to zero, or to a
|
|
non-numeric value, Readline waits until another key is pressed to
|
|
decide which key sequence to complete.
|
|
The default value is <code class="code">500</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">mark-directories</code></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, completed directory names have a slash appended.
|
|
The default is ‘<samp class="samp">on</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-mark_002dmodified_002dlines"></a><span><code class="code">mark-modified-lines</code><a class="copiable-link" href="#index-mark_002dmodified_002dlines"> ¶</a></span></dt>
|
|
<dd><p>When this variable is set to ‘<samp class="samp">on</samp>’, Readline displays an
|
|
asterisk (‘<samp class="samp">*</samp>’) at the start of history lines which have been modified.
|
|
This variable is ‘<samp class="samp">off</samp>’ by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-mark_002dsymlinked_002ddirectories"></a><span><code class="code">mark-symlinked-directories</code><a class="copiable-link" href="#index-mark_002dsymlinked_002ddirectories"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, completed names which are symbolic links to directories
|
|
have a slash appended, subject to the value of <code class="code">mark-directories</code>.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-match_002dhidden_002dfiles"></a><span><code class="code">match-hidden-files</code><a class="copiable-link" href="#index-match_002dhidden_002dfiles"> ¶</a></span></dt>
|
|
<dd><p>This variable, when set to ‘<samp class="samp">on</samp>’, forces Readline to match files whose
|
|
names begin with a ‘<samp class="samp">.</samp>’ (hidden files) when performing filename
|
|
completion.
|
|
If set to ‘<samp class="samp">off</samp>’, the user must include the leading ‘<samp class="samp">.</samp>’
|
|
in the filename to be completed.
|
|
This variable is ‘<samp class="samp">on</samp>’ by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-menu_002dcomplete_002ddisplay_002dprefix"></a><span><code class="code">menu-complete-display-prefix</code><a class="copiable-link" href="#index-menu_002dcomplete_002ddisplay_002dprefix"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, menu completion displays the common prefix of the
|
|
list of possible completions (which may be empty) before cycling through
|
|
the list.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-output_002dmeta"></a><span><code class="code">output-meta</code><a class="copiable-link" href="#index-output_002dmeta"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline displays characters with the
|
|
eighth bit set directly rather than as a meta-prefixed escape
|
|
sequence.
|
|
The default is ‘<samp class="samp">off</samp>’, but Readline sets it to ‘<samp class="samp">on</samp>’
|
|
if the locale contains characters whose encodings may include
|
|
bytes with the eighth bit set.
|
|
This variable is dependent on the <code class="code">LC_CTYPE</code> locale category, and
|
|
its value may change if the locale changes.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-page_002dcompletions"></a><span><code class="code">page-completions</code><a class="copiable-link" href="#index-page_002dcompletions"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline uses an internal pager resembling
|
|
<i class="i">more</i>(1)
|
|
to display a screenful of possible completions at a time.
|
|
This variable is ‘<samp class="samp">on</samp>’ by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">prefer-visible-bell</code></dt>
|
|
<dd><p>See <code class="code">bell-style</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">print-completions-horizontally</code></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline displays completions with matches
|
|
sorted horizontally in alphabetical order, rather than down the screen.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-revert_002dall_002dat_002dnewline"></a><span><code class="code">revert-all-at-newline</code><a class="copiable-link" href="#index-revert_002dall_002dat_002dnewline"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline will undo all changes to history lines
|
|
before returning when executing <code class="code">accept-line</code>.
|
|
By default,
|
|
history lines may be modified and retain individual undo lists across
|
|
calls to <code class="code">readline()</code>.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-search_002dignore_002dcase"></a><span><code class="code">search-ignore-case</code><a class="copiable-link" href="#index-search_002dignore_002dcase"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, Readline performs incremental and non-incremental
|
|
history list searches in a case-insensitive fashion.
|
|
The default value is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-show_002dall_002dif_002dambiguous"></a><span><code class="code">show-all-if-ambiguous</code><a class="copiable-link" href="#index-show_002dall_002dif_002dambiguous"> ¶</a></span></dt>
|
|
<dd><p>This alters the default behavior of the completion functions.
|
|
If set to ‘<samp class="samp">on</samp>’,
|
|
words which have more than one possible completion cause the
|
|
matches to be listed immediately instead of ringing the bell.
|
|
The default value is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-show_002dall_002dif_002dunmodified"></a><span><code class="code">show-all-if-unmodified</code><a class="copiable-link" href="#index-show_002dall_002dif_002dunmodified"> ¶</a></span></dt>
|
|
<dd><p>This alters the default behavior of the completion functions in
|
|
a fashion similar to <var class="var">show-all-if-ambiguous</var>.
|
|
If set to ‘<samp class="samp">on</samp>’,
|
|
words which have more than one possible completion without any
|
|
possible partial completion (the possible completions don’t share
|
|
a common prefix) cause the matches to be listed immediately instead
|
|
of ringing the bell.
|
|
The default value is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-show_002dmode_002din_002dprompt"></a><span><code class="code">show-mode-in-prompt</code><a class="copiable-link" href="#index-show_002dmode_002din_002dprompt"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, add a string to the beginning of the prompt
|
|
indicating the editing mode: emacs, vi command, or vi insertion.
|
|
The mode strings are user-settable (e.g., <var class="var">emacs-mode-string</var>).
|
|
The default value is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-skip_002dcompleted_002dtext"></a><span><code class="code">skip-completed-text</code><a class="copiable-link" href="#index-skip_002dcompleted_002dtext"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, this alters the default completion behavior when
|
|
inserting a single match into the line.
|
|
It’s only active when performing completion in the middle of a word.
|
|
If enabled, Readline does not insert characters from the completion
|
|
that match characters after point in the word being completed,
|
|
so portions of the word following the cursor are not duplicated.
|
|
For instance, if this is enabled, attempting completion when the cursor
|
|
is after the first ‘<samp class="samp">e</samp>’ in ‘<samp class="samp">Makefile</samp>’ will result in
|
|
‘<samp class="samp">Makefile</samp>’ rather than ‘<samp class="samp">Makefilefile</samp>’,
|
|
assuming there is a single possible completion.
|
|
The default value is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-vi_002dcmd_002dmode_002dstring"></a><span><code class="code">vi-cmd-mode-string</code><a class="copiable-link" href="#index-vi_002dcmd_002dmode_002dstring"> ¶</a></span></dt>
|
|
<dd><p>If the <var class="var">show-mode-in-prompt</var> variable is enabled,
|
|
this string is displayed immediately before the last line of the primary
|
|
prompt when vi editing mode is active and in command mode.
|
|
The value is expanded like a key binding, so the standard set of
|
|
meta- and control- prefixes and backslash escape sequences is available.
|
|
The ‘<samp class="samp">\1</samp>’ and ‘<samp class="samp">\2</samp>’ escapes begin and end sequences of
|
|
non-printing characters, which can be used to embed a terminal control
|
|
sequence into the mode string.
|
|
The default is ‘<samp class="samp">(cmd)</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-vi_002dins_002dmode_002dstring"></a><span><code class="code">vi-ins-mode-string</code><a class="copiable-link" href="#index-vi_002dins_002dmode_002dstring"> ¶</a></span></dt>
|
|
<dd><p>If the <var class="var">show-mode-in-prompt</var> variable is enabled,
|
|
this string is displayed immediately before the last line of the primary
|
|
prompt when vi editing mode is active and in insertion mode.
|
|
The value is expanded like a key binding, so the standard set of
|
|
meta- and control- prefixes and backslash escape sequences is available.
|
|
The ‘<samp class="samp">\1</samp>’ and ‘<samp class="samp">\2</samp>’ escapes begin and end sequences of
|
|
non-printing characters, which can be used to embed a terminal control
|
|
sequence into the mode string.
|
|
The default is ‘<samp class="samp">(ins)</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-visible_002dstats"></a><span><code class="code">visible-stats</code><a class="copiable-link" href="#index-visible_002dstats"> ¶</a></span></dt>
|
|
<dd><p>If set to ‘<samp class="samp">on</samp>’, a character denoting a file’s type
|
|
is appended to the filename when listing possible
|
|
completions.
|
|
The default is ‘<samp class="samp">off</samp>’.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
</dd>
|
|
<dt>Key Bindings</dt>
|
|
<dd><p>The syntax for controlling key bindings in the init file is simple.
|
|
First you need to find the name of the command that you
|
|
want to change.
|
|
The following sections contain tables of the command
|
|
name, the default keybinding, if any, and a short description of what
|
|
the command does.
|
|
</p>
|
|
<p>Once you know the name of the command, simply place on a line
|
|
in the init file the name of the key
|
|
you wish to bind the command to, a colon, and then the name of the
|
|
command.
|
|
There can be no space between the key name and the colon – that will be
|
|
interpreted as part of the key name.
|
|
The name of the key can be expressed in different ways, depending on
|
|
what you find most comfortable.
|
|
</p>
|
|
<p>In addition to command names, Readline allows keys to be bound
|
|
to a string that is inserted when the key is pressed (a <var class="var">macro</var>).
|
|
The difference between a macro and a command is that a macro is
|
|
enclosed in single or double quotes.
|
|
</p>
|
|
<p>The <code class="code">bind -p</code><!-- /@w --> command displays Readline function names and
|
|
bindings in a format that can be put directly into an initialization file.
|
|
See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><var class="var">keyname</var>: <var class="var">function-name</var> or <var class="var">macro</var><!-- /@w --></dt>
|
|
<dd><p><var class="var">keyname</var> is the name of a key spelled out in English.
|
|
For example:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">Control-u: universal-argument
|
|
Meta-Rubout: backward-kill-word
|
|
Control-o: "> output"
|
|
</pre></div>
|
|
|
|
<p>In the example above, <kbd class="kbd">C-u</kbd> is bound to the function
|
|
<code class="code">universal-argument</code>,
|
|
<kbd class="kbd">M-DEL</kbd> is bound to the function <code class="code">backward-kill-word</code>, and
|
|
<kbd class="kbd">C-o</kbd> is bound to run the macro
|
|
expressed on the right hand side (that is, to insert the text
|
|
‘<samp class="samp">> output</samp>’ into the line).
|
|
</p>
|
|
<p>This key binding syntax recognizes a number of symbolic character names:
|
|
<var class="var">DEL</var>,
|
|
<var class="var">ESC</var>,
|
|
<var class="var">ESCAPE</var>,
|
|
<var class="var">LFD</var>,
|
|
<var class="var">NEWLINE</var>,
|
|
<var class="var">RET</var>,
|
|
<var class="var">RETURN</var>,
|
|
<var class="var">RUBOUT</var>
|
|
(a destructive backspace),
|
|
<var class="var">SPACE</var>,
|
|
<var class="var">SPC</var>,
|
|
and
|
|
<var class="var">TAB</var>.
|
|
</p>
|
|
</dd>
|
|
<dt>"<var class="var">keyseq</var>": <var class="var">function-name</var> or <var class="var">macro</var><!-- /@w --></dt>
|
|
<dd><p><var class="var">keyseq</var> differs from <var class="var">keyname</var> above in that strings
|
|
denoting an entire key sequence can be specified, by placing
|
|
the key sequence in double quotes.
|
|
Some <small class="sc">GNU</small> Emacs style key escapes can be used,
|
|
as in the following example, but none of the
|
|
special character names are recognized.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">"\C-u": universal-argument
|
|
"\C-x\C-r": re-read-init-file
|
|
"\e[11~": "Function Key 1"
|
|
</pre></div>
|
|
|
|
<p>In the above example, <kbd class="kbd">C-u</kbd> is again bound to the function
|
|
<code class="code">universal-argument</code> (just as it was in the first example),
|
|
‘<samp class="samp"><kbd class="kbd">C-x</kbd> <kbd class="kbd">C-r</kbd></samp>’ is bound to the function <code class="code">re-read-init-file</code>,
|
|
and ‘<samp class="samp"><kbd class="key">ESC</kbd> <kbd class="key">[</kbd> <kbd class="key">1</kbd> <kbd class="key">1</kbd> <kbd class="key">~</kbd></samp>’ is bound to insert
|
|
the text ‘<samp class="samp">Function Key 1</samp>’.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>The following <small class="sc">GNU</small> Emacs style escape sequences are available when
|
|
specifying key sequences:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code"><kbd class="kbd">\C-</kbd></code></dt>
|
|
<dd><p>A control prefix.
|
|
</p></dd>
|
|
<dt><code class="code"><kbd class="kbd">\M-</kbd></code></dt>
|
|
<dd><p>Adding the meta prefix or converting the following character to a meta
|
|
character, as described above under <code class="code">force-meta-prefix</code>
|
|
(see <code class="code">Variable Settings</code> in <a class="ref" href="#Readline-Init-File-Syntax">Readline Init File Syntax</a>).
|
|
</p></dd>
|
|
<dt><code class="code"><kbd class="kbd">\e</kbd></code></dt>
|
|
<dd><p>An escape character.
|
|
</p></dd>
|
|
<dt><code class="code"><kbd class="kbd">\\</kbd></code></dt>
|
|
<dd><p>Backslash.
|
|
</p></dd>
|
|
<dt><code class="code"><kbd class="kbd">\"</kbd></code></dt>
|
|
<dd><p><kbd class="key">"</kbd>, a double quotation mark.
|
|
</p></dd>
|
|
<dt><code class="code"><kbd class="kbd">\'</kbd></code></dt>
|
|
<dd><p><kbd class="key">'</kbd>, a single quote or apostrophe.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>In addition to the <small class="sc">GNU</small> Emacs style escape sequences, a second
|
|
set of backslash escapes is available:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">\a</code></dt>
|
|
<dd><p>alert (bell)
|
|
</p></dd>
|
|
<dt><code class="code">\b</code></dt>
|
|
<dd><p>backspace
|
|
</p></dd>
|
|
<dt><code class="code">\d</code></dt>
|
|
<dd><p>delete
|
|
</p></dd>
|
|
<dt><code class="code">\f</code></dt>
|
|
<dd><p>form feed
|
|
</p></dd>
|
|
<dt><code class="code">\n</code></dt>
|
|
<dd><p>newline
|
|
</p></dd>
|
|
<dt><code class="code">\r</code></dt>
|
|
<dd><p>carriage return
|
|
</p></dd>
|
|
<dt><code class="code">\t</code></dt>
|
|
<dd><p>horizontal tab
|
|
</p></dd>
|
|
<dt><code class="code">\v</code></dt>
|
|
<dd><p>vertical tab
|
|
</p></dd>
|
|
<dt><code class="code">\<var class="var">nnn</var></code></dt>
|
|
<dd><p>The eight-bit character whose value is the octal value <var class="var">nnn</var>
|
|
(one to three digits).
|
|
</p></dd>
|
|
<dt><code class="code">\x<var class="var">HH</var></code></dt>
|
|
<dd><p>The eight-bit character whose value is the hexadecimal value <var class="var">HH</var>
|
|
(one or two hex digits).
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>When entering the text of a macro, single or double quotes must
|
|
be used to indicate a macro definition.
|
|
Unquoted text is assumed to be a function name.
|
|
The backslash escapes described above are expanded
|
|
in the macro body.
|
|
Backslash will quote any other character in the macro text,
|
|
including ‘<samp class="samp">"</samp>’ and ‘<samp class="samp">'</samp>’.
|
|
For example, the following binding will make ‘<samp class="samp"><kbd class="kbd">C-x</kbd> \</samp>’
|
|
insert a single ‘<samp class="samp">\</samp>’ into the line:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">"\C-x\\": "\\"
|
|
</pre></div>
|
|
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Conditional-Init-Constructs">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Sample-Init-File" accesskey="n" rel="next">Sample Init File</a>, Previous: <a href="#Readline-Init-File-Syntax" accesskey="p" rel="prev">Readline Init File Syntax</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Conditional-Init-Constructs-1"><span>8.3.2 Conditional Init Constructs<a class="copiable-link" href="#Conditional-Init-Constructs-1"> ¶</a></span></h4>
|
|
|
|
<p>Readline implements a facility similar in spirit to the conditional
|
|
compilation features of the C preprocessor which allows key
|
|
bindings and variable settings to be performed as the result
|
|
of tests.
|
|
There are four parser directives available.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">$if</code></dt>
|
|
<dd><p>The <code class="code">$if</code> construct allows bindings to be made based on the
|
|
editing mode, the terminal being used, or the application using
|
|
Readline.
|
|
The text of the test, after any comparison operator,
|
|
extends to the end of the line;
|
|
unless otherwise noted, no characters are required to isolate it.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">mode</code></dt>
|
|
<dd><p>The <code class="code">mode=</code> form of the <code class="code">$if</code> directive is used to test
|
|
whether Readline is in <code class="code">emacs</code> or <code class="code">vi</code> mode.
|
|
This may be used in conjunction
|
|
with the ‘<samp class="samp">set keymap</samp>’ command, for instance, to set bindings in
|
|
the <code class="code">emacs-standard</code> and <code class="code">emacs-ctlx</code> keymaps only if
|
|
Readline is starting out in <code class="code">emacs</code> mode.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">term</code></dt>
|
|
<dd><p>The <code class="code">term=</code> form may be used to include terminal-specific
|
|
key bindings, perhaps to bind the key sequences output by the
|
|
terminal’s function keys.
|
|
The word on the right side of the
|
|
‘<samp class="samp">=</samp>’
|
|
is tested against both the full name of the terminal and the portion
|
|
of the terminal name before the first ‘<samp class="samp">-</samp>’.
|
|
This allows <code class="code">xterm</code> to match both <code class="code">xterm</code> and
|
|
<code class="code">xterm-256color</code>, for instance.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">version</code></dt>
|
|
<dd><p>The <code class="code">version</code> test may be used to perform comparisons against
|
|
specific Readline versions.
|
|
The <code class="code">version</code> expands to the current Readline version.
|
|
The set of comparison operators includes
|
|
‘<samp class="samp">=</samp>’ (and ‘<samp class="samp">==</samp>’), ‘<samp class="samp">!=</samp>’, ‘<samp class="samp"><=</samp>’, ‘<samp class="samp">>=</samp>’, ‘<samp class="samp"><</samp>’,
|
|
and ‘<samp class="samp">></samp>’.
|
|
The version number supplied on the right side of the operator consists
|
|
of a major version number, an optional decimal point, and an optional
|
|
minor version (e.g., ‘<samp class="samp">7.1</samp>’).
|
|
If the minor version is omitted, it
|
|
defaults to ‘<samp class="samp">0</samp>’.
|
|
The operator may be separated from the string <code class="code">version</code> and
|
|
from the version number argument by whitespace.
|
|
The following example sets a variable if the Readline version being used
|
|
is 7.0 or newer:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">$if version >= 7.0
|
|
set show-mode-in-prompt on
|
|
$endif
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">application</code></dt>
|
|
<dd><p>The <var class="var">application</var> construct is used to include
|
|
application-specific settings.
|
|
Each program using the Readline
|
|
library sets the <var class="var">application name</var>, and you can test for
|
|
a particular value.
|
|
This could be used to bind key sequences to functions useful for
|
|
a specific program.
|
|
For instance, the following command adds a
|
|
key sequence that quotes the current or previous word in Bash:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">$if Bash
|
|
# Quote the current or previous word
|
|
"\C-xq": "\eb\"\ef\""
|
|
$endif
|
|
</pre></div>
|
|
|
|
</dd>
|
|
<dt><code class="code">variable</code></dt>
|
|
<dd><p>The <var class="var">variable</var> construct provides simple equality tests for Readline
|
|
variables and values.
|
|
The permitted comparison operators are ‘<samp class="samp">=</samp>’, ‘<samp class="samp">==</samp>’, and ‘<samp class="samp">!=</samp>’.
|
|
The variable name must be separated from the comparison operator by
|
|
whitespace; the operator may be separated from the value on the right hand
|
|
side by whitespace.
|
|
String and boolean variables may be tested.
|
|
Boolean variables must be
|
|
tested against the values <var class="var">on</var> and <var class="var">off</var>.
|
|
The following example is equivalent to the <code class="code">mode=emacs</code> test described
|
|
above:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">$if editing-mode == emacs
|
|
set show-mode-in-prompt on
|
|
$endif
|
|
</pre></div>
|
|
</dd>
|
|
</dl>
|
|
|
|
</dd>
|
|
<dt><code class="code">$else</code></dt>
|
|
<dd><p>Commands in this branch of the <code class="code">$if</code> directive are executed if
|
|
the test fails.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">$endif</code></dt>
|
|
<dd><p>This command, as seen in the previous example, terminates an
|
|
<code class="code">$if</code> command.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">$include</code></dt>
|
|
<dd><p>This directive takes a single filename as an argument and reads commands
|
|
and key bindings from that file.
|
|
For example, the following directive reads from <samp class="file">/etc/inputrc</samp>:
|
|
</p><div class="example">
|
|
<pre class="example-preformatted">$include /etc/inputrc
|
|
</pre></div>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Sample-Init-File">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Conditional-Init-Constructs" accesskey="p" rel="prev">Conditional Init Constructs</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Sample-Init-File-1"><span>8.3.3 Sample Init File<a class="copiable-link" href="#Sample-Init-File-1"> ¶</a></span></h4>
|
|
|
|
<p>Here is an example of an <var class="var">inputrc</var> file. This illustrates key
|
|
binding, variable assignment, and conditional syntax.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted"># This file controls the behavior of line input editing for
|
|
# programs that use the GNU Readline library. Existing
|
|
# programs include FTP, Bash, and GDB.
|
|
#
|
|
# You can re-read the inputrc file with C-x C-r.
|
|
# Lines beginning with '#' are comments.
|
|
#
|
|
# First, include any system-wide bindings and variable
|
|
# assignments from /etc/Inputrc
|
|
$include /etc/Inputrc
|
|
|
|
#
|
|
# Set various bindings for emacs mode.
|
|
|
|
set editing-mode emacs
|
|
|
|
$if mode=emacs
|
|
|
|
Meta-Control-h: backward-kill-word Text after the function name is ignored
|
|
|
|
#
|
|
# Arrow keys in keypad mode
|
|
#
|
|
#"\M-OD": backward-char
|
|
#"\M-OC": forward-char
|
|
#"\M-OA": previous-history
|
|
#"\M-OB": next-history
|
|
#
|
|
# Arrow keys in ANSI mode
|
|
#
|
|
"\M-[D": backward-char
|
|
"\M-[C": forward-char
|
|
"\M-[A": previous-history
|
|
"\M-[B": next-history
|
|
#
|
|
# Arrow keys in 8 bit keypad mode
|
|
#
|
|
#"\M-\C-OD": backward-char
|
|
#"\M-\C-OC": forward-char
|
|
#"\M-\C-OA": previous-history
|
|
#"\M-\C-OB": next-history
|
|
#
|
|
# Arrow keys in 8 bit ANSI mode
|
|
#
|
|
#"\M-\C-[D": backward-char
|
|
#"\M-\C-[C": forward-char
|
|
#"\M-\C-[A": previous-history
|
|
#"\M-\C-[B": next-history
|
|
|
|
C-q: quoted-insert
|
|
|
|
$endif
|
|
|
|
# An old-style binding. This happens to be the default.
|
|
TAB: complete
|
|
|
|
# Macros that are convenient for shell interaction
|
|
$if Bash
|
|
# edit the path
|
|
"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
|
|
# prepare to type a quoted word --
|
|
# insert open and close double quotes
|
|
# and move to just after the open quote
|
|
"\C-x\"": "\"\"\C-b"
|
|
# insert a backslash (testing backslash escapes
|
|
# in sequences and macros)
|
|
"\C-x\\": "\\"
|
|
# Quote the current or previous word
|
|
"\C-xq": "\eb\"\ef\""
|
|
# Add a binding to refresh the line, which is unbound
|
|
"\C-xr": redraw-current-line
|
|
# Edit variable on current line.
|
|
"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
|
|
$endif
|
|
|
|
# use a visible bell if one is available
|
|
set bell-style visible
|
|
|
|
# don't strip characters to 7 bits when reading
|
|
set input-meta on
|
|
|
|
# allow iso-latin1 characters to be inserted rather
|
|
# than converted to prefix-meta sequences
|
|
set convert-meta off
|
|
|
|
# display characters with the eighth bit set directly
|
|
# rather than as meta-prefixed characters
|
|
set output-meta on
|
|
|
|
# if there are 150 or more possible completions for a word,
|
|
# ask whether or not the user wants to see all of them
|
|
set completion-query-items 150
|
|
|
|
# For FTP
|
|
$if Ftp
|
|
"\C-xg": "get \M-?"
|
|
"\C-xt": "put \M-?"
|
|
"\M-.": yank-last-arg
|
|
$endif
|
|
</pre></div>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Bindable-Readline-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Readline-vi-Mode" accesskey="n" rel="next">Readline vi Mode</a>, Previous: <a href="#Readline-Init-File" accesskey="p" rel="prev">Readline Init File</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bindable-Readline-Commands-1"><span>8.4 Bindable Readline Commands<a class="copiable-link" href="#Bindable-Readline-Commands-1"> ¶</a></span></h3>
|
|
|
|
|
|
<p>This section describes Readline commands that may be bound to key
|
|
sequences.
|
|
You can list your key bindings by executing
|
|
<code class="code">bind -P</code><!-- /@w --> or, for a more terse format, suitable for an
|
|
<var class="var">inputrc</var> file, <code class="code">bind -p</code><!-- /@w -->. (See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>.)
|
|
Command names without an accompanying key sequence are unbound by default.
|
|
</p>
|
|
<p>In the following descriptions, <em class="dfn">point</em> refers to the current cursor
|
|
position, and <em class="dfn">mark</em> refers to a cursor position saved by the
|
|
<code class="code">set-mark</code> command.
|
|
The text between the point and mark is referred to as the <em class="dfn">region</em>.
|
|
Readline
|
|
has the concept of an <em class="emph">active region</em>:
|
|
when the region is active,
|
|
Readline redisplay highlights the region using the
|
|
value of the
|
|
<code class="code">active-region-start-color</code>
|
|
variable.
|
|
The <code class="code">enable-active-region</code> variable turns this on and off.
|
|
Several commands set the region to active; those are noted below.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Commands-For-Moving" accesskey="1">Commands For Moving</a></li>
|
|
<li><a href="#Commands-For-History" accesskey="2">Commands For Manipulating The History</a></li>
|
|
<li><a href="#Commands-For-Text" accesskey="3">Commands For Changing Text</a></li>
|
|
<li><a href="#Commands-For-Killing" accesskey="4">Killing And Yanking</a></li>
|
|
<li><a href="#Numeric-Arguments" accesskey="5">Specifying Numeric Arguments</a></li>
|
|
<li><a href="#Commands-For-Completion" accesskey="6">Letting Readline Type For You</a></li>
|
|
<li><a href="#Keyboard-Macros" accesskey="7">Keyboard Macros</a></li>
|
|
<li><a href="#Miscellaneous-Commands" accesskey="8">Some Miscellaneous Commands</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Commands-For-Moving">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Commands-For-History" accesskey="n" rel="next">Commands For Manipulating The History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Commands-For-Moving-1"><span>8.4.1 Commands For Moving<a class="copiable-link" href="#Commands-For-Moving-1"> ¶</a></span></h4>
|
|
<dl class="ftable">
|
|
<dt><a id="index-beginning_002dof_002dline-_0028C_002da_0029"></a><span><code class="code">beginning-of-line (C-a)</code><a class="copiable-link" href="#index-beginning_002dof_002dline-_0028C_002da_0029"> ¶</a></span></dt>
|
|
<dd><p>Move to the start of the current line.
|
|
This may also be bound to the Home key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-end_002dof_002dline-_0028C_002de_0029"></a><span><code class="code">end-of-line (C-e)</code><a class="copiable-link" href="#index-end_002dof_002dline-_0028C_002de_0029"> ¶</a></span></dt>
|
|
<dd><p>Move to the end of the line.
|
|
This may also be bound to the End key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-forward_002dchar-_0028C_002df_0029"></a><span><code class="code">forward-char (C-f)</code><a class="copiable-link" href="#index-forward_002dchar-_0028C_002df_0029"> ¶</a></span></dt>
|
|
<dd><p>Move forward a character.
|
|
This may also be bound to the right arrow key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-backward_002dchar-_0028C_002db_0029"></a><span><code class="code">backward-char (C-b)</code><a class="copiable-link" href="#index-backward_002dchar-_0028C_002db_0029"> ¶</a></span></dt>
|
|
<dd><p>Move back a character.
|
|
This may also be bound to the left arrow key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-forward_002dword-_0028M_002df_0029"></a><span><code class="code">forward-word (M-f)</code><a class="copiable-link" href="#index-forward_002dword-_0028M_002df_0029"> ¶</a></span></dt>
|
|
<dd><p>Move forward to the end of the next word.
|
|
Words are composed of letters and digits.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-backward_002dword-_0028M_002db_0029"></a><span><code class="code">backward-word (M-b)</code><a class="copiable-link" href="#index-backward_002dword-_0028M_002db_0029"> ¶</a></span></dt>
|
|
<dd><p>Move back to the start of the current or previous word.
|
|
Words are composed of letters and digits.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-shell_002dforward_002dword-_0028M_002dC_002df_0029"></a><span><code class="code">shell-forward-word (M-C-f)</code><a class="copiable-link" href="#index-shell_002dforward_002dword-_0028M_002dC_002df_0029"> ¶</a></span></dt>
|
|
<dd><p>Move forward to the end of the next word.
|
|
Words are delimited by non-quoted shell metacharacters.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"></a><span><code class="code">shell-backward-word (M-C-b)</code><a class="copiable-link" href="#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"> ¶</a></span></dt>
|
|
<dd><p>Move back to the start of the current or previous word.
|
|
Words are delimited by non-quoted shell metacharacters.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-previous_002dscreen_002dline-_0028_0029"></a><span><code class="code">previous-screen-line ()</code><a class="copiable-link" href="#index-previous_002dscreen_002dline-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt to move point to the same physical screen column on the previous
|
|
physical screen line.
|
|
This will not have the desired effect if the current
|
|
Readline line does not take up more than one physical line or if point is not
|
|
greater than the length of the prompt plus the screen width.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-next_002dscreen_002dline-_0028_0029"></a><span><code class="code">next-screen-line ()</code><a class="copiable-link" href="#index-next_002dscreen_002dline-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt to move point to the same physical screen column on the next
|
|
physical screen line.
|
|
This will not have the desired effect if the current
|
|
Readline line does not take up more than one physical line or if the length
|
|
of the current Readline line is not greater than the length of the prompt
|
|
plus the screen width.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-clear_002ddisplay-_0028M_002dC_002dl_0029"></a><span><code class="code">clear-display (M-C-l)</code><a class="copiable-link" href="#index-clear_002ddisplay-_0028M_002dC_002dl_0029"> ¶</a></span></dt>
|
|
<dd><p>Clear the screen and, if possible, the terminal’s scrollback buffer,
|
|
then redraw the current line,
|
|
leaving the current line at the top of the screen.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-clear_002dscreen-_0028C_002dl_0029"></a><span><code class="code">clear-screen (C-l)</code><a class="copiable-link" href="#index-clear_002dscreen-_0028C_002dl_0029"> ¶</a></span></dt>
|
|
<dd><p>Clear the screen,
|
|
then redraw the current line,
|
|
leaving the current line at the top of the screen.
|
|
If given a numeric argument, this refreshes the current line
|
|
without clearing the screen.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-redraw_002dcurrent_002dline-_0028_0029"></a><span><code class="code">redraw-current-line ()</code><a class="copiable-link" href="#index-redraw_002dcurrent_002dline-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Refresh the current line. By default, this is unbound.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Commands-For-History">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Commands-For-Text" accesskey="n" rel="next">Commands For Changing Text</a>, Previous: <a href="#Commands-For-Moving" accesskey="p" rel="prev">Commands For Moving</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Commands-For-Manipulating-The-History"><span>8.4.2 Commands For Manipulating The History<a class="copiable-link" href="#Commands-For-Manipulating-The-History"> ¶</a></span></h4>
|
|
|
|
<dl class="ftable">
|
|
<dt><a id="index-accept_002dline-_0028Newline-or-Return_0029"></a><span><code class="code">accept-line (Newline or Return)</code><a class="copiable-link" href="#index-accept_002dline-_0028Newline-or-Return_0029"> ¶</a></span></dt>
|
|
<dd><p>Accept the line regardless of where the cursor is.
|
|
If this line is
|
|
non-empty, add it to the history list according to the setting of
|
|
the <code class="env">HISTCONTROL</code> and <code class="env">HISTIGNORE</code> variables.
|
|
If this line is a modified history line, then restore the history line
|
|
to its original state.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-previous_002dhistory-_0028C_002dp_0029"></a><span><code class="code">previous-history (C-p)</code><a class="copiable-link" href="#index-previous_002dhistory-_0028C_002dp_0029"> ¶</a></span></dt>
|
|
<dd><p>Move “back” through the history list, fetching the previous command.
|
|
This may also be bound to the up arrow key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-next_002dhistory-_0028C_002dn_0029"></a><span><code class="code">next-history (C-n)</code><a class="copiable-link" href="#index-next_002dhistory-_0028C_002dn_0029"> ¶</a></span></dt>
|
|
<dd><p>Move “forward” through the history list, fetching the next command.
|
|
This may also be bound to the down arrow key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"></a><span><code class="code">beginning-of-history (M-<)</code><a class="copiable-link" href="#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"> ¶</a></span></dt>
|
|
<dd><p>Move to the first line in the history.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-end_002dof_002dhistory-_0028M_002d_003e_0029"></a><span><code class="code">end-of-history (M->)</code><a class="copiable-link" href="#index-end_002dof_002dhistory-_0028M_002d_003e_0029"> ¶</a></span></dt>
|
|
<dd><p>Move to the end of the input history, i.e., the line currently
|
|
being entered.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"></a><span><code class="code">reverse-search-history (C-r)</code><a class="copiable-link" href="#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"> ¶</a></span></dt>
|
|
<dd><p>Search backward starting at the current line and moving “up” through
|
|
the history as necessary.
|
|
This is an incremental search.
|
|
This command sets the region to the matched text and activates the region.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-forward_002dsearch_002dhistory-_0028C_002ds_0029"></a><span><code class="code">forward-search-history (C-s)</code><a class="copiable-link" href="#index-forward_002dsearch_002dhistory-_0028C_002ds_0029"> ¶</a></span></dt>
|
|
<dd><p>Search forward starting at the current line and moving “down” through
|
|
the history as necessary.
|
|
This is an incremental search.
|
|
This command sets the region to the matched text and activates the region.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"></a><span><code class="code">non-incremental-reverse-search-history (M-p)</code><a class="copiable-link" href="#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"> ¶</a></span></dt>
|
|
<dd><p>Search backward starting at the current line and moving “up”
|
|
</p>
|
|
<p>through the history as necessary using a non-incremental search
|
|
for a string supplied by the user.
|
|
The search string may match anywhere in a history line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"></a><span><code class="code">non-incremental-forward-search-history (M-n)</code><a class="copiable-link" href="#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"> ¶</a></span></dt>
|
|
<dd><p>Search forward starting at the current line and moving “down”
|
|
through the history as necessary using a non-incremental search
|
|
for a string supplied by the user.
|
|
The search string may match anywhere in a history line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dsearch_002dbackward-_0028_0029"></a><span><code class="code">history-search-backward ()</code><a class="copiable-link" href="#index-history_002dsearch_002dbackward-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Search backward through the history for the string of characters
|
|
between the start of the current line and the point.
|
|
The search string must match at the beginning of a history line.
|
|
This is a non-incremental search.
|
|
By default, this command is unbound, but may be bound to the Page Down
|
|
key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dsearch_002dforward-_0028_0029"></a><span><code class="code">history-search-forward ()</code><a class="copiable-link" href="#index-history_002dsearch_002dforward-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Search forward through the history for the string of characters
|
|
between the start of the current line and the point.
|
|
The search string must match at the beginning of a history line.
|
|
This is a non-incremental search.
|
|
By default, this command is unbound, but may be bound to the Page Up
|
|
key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"></a><span><code class="code">history-substring-search-backward ()</code><a class="copiable-link" href="#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Search backward through the history for the string of characters
|
|
between the start of the current line and the point.
|
|
The search string may match anywhere in a history line.
|
|
This is a non-incremental search.
|
|
By default, this command is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dsubstring_002dsearch_002dforward-_0028_0029"></a><span><code class="code">history-substring-search-forward ()</code><a class="copiable-link" href="#index-history_002dsubstring_002dsearch_002dforward-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Search forward through the history for the string of characters
|
|
between the start of the current line and the point.
|
|
The search string may match anywhere in a history line.
|
|
This is a non-incremental search.
|
|
By default, this command is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"></a><span><code class="code">yank-nth-arg (M-C-y)</code><a class="copiable-link" href="#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"> ¶</a></span></dt>
|
|
<dd><p>Insert the first argument to the previous command (usually
|
|
the second word on the previous line) at point.
|
|
With an argument <var class="var">n</var>,
|
|
insert the <var class="var">n</var>th word from the previous command (the words
|
|
in the previous command begin with word 0).
|
|
A negative argument inserts the <var class="var">n</var>th word from the end of
|
|
the previous command.
|
|
Once the argument <var class="var">n</var> is computed,
|
|
this uses the history expansion facilities to extract the
|
|
<var class="var">n</var>th word, as if the
|
|
‘<samp class="samp">!<var class="var">n</var></samp>’ history expansion had been specified.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"></a><span><code class="code">yank-last-arg (M-. or M-_)</code><a class="copiable-link" href="#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"> ¶</a></span></dt>
|
|
<dd><p>Insert last argument to the previous command (the last word of the
|
|
previous history entry).
|
|
With a numeric argument, behave exactly like <code class="code">yank-nth-arg</code>.
|
|
Successive calls to <code class="code">yank-last-arg</code> move back through the history
|
|
list, inserting the last word (or the word specified by the argument to
|
|
the first call) of each line in turn.
|
|
Any numeric argument supplied to these successive calls determines
|
|
the direction to move through the history.
|
|
A negative argument switches the direction through the history
|
|
(back or forward).
|
|
This uses the history expansion facilities to extract the
|
|
last word, as if the
|
|
‘<samp class="samp">!$</samp>’ history expansion had been specified.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-operate_002dand_002dget_002dnext-_0028C_002do_0029"></a><span><code class="code">operate-and-get-next (C-o)</code><a class="copiable-link" href="#index-operate_002dand_002dget_002dnext-_0028C_002do_0029"> ¶</a></span></dt>
|
|
<dd><p>Accept the current line for return to the calling application as if a
|
|
newline had been entered,
|
|
and fetch the next line relative to the current line from the history
|
|
for editing.
|
|
A numeric argument, if supplied, specifies the history entry
|
|
to use instead of the current line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-fetch_002dhistory-_0028_0029"></a><span><code class="code">fetch-history ()</code><a class="copiable-link" href="#index-fetch_002dhistory-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>With a numeric argument, fetch that entry from the history list
|
|
and make it the current line.
|
|
Without an argument, move back to the first entry in the history list.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Commands-For-Text">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Commands-For-Killing" accesskey="n" rel="next">Killing And Yanking</a>, Previous: <a href="#Commands-For-History" accesskey="p" rel="prev">Commands For Manipulating The History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Commands-For-Changing-Text"><span>8.4.3 Commands For Changing Text<a class="copiable-link" href="#Commands-For-Changing-Text"> ¶</a></span></h4>
|
|
|
|
<dl class="ftable">
|
|
<dt><a id="index-end_002dof_002dfile-_0028usually-C_002dd_0029"></a><span><code class="code"><i class="i">end-of-file</i> (usually C-d)</code><a class="copiable-link" href="#index-end_002dof_002dfile-_0028usually-C_002dd_0029"> ¶</a></span></dt>
|
|
<dd><p>The character indicating end-of-file as set, for example, by
|
|
<code class="code">stty</code>.
|
|
If this character is read when there are no characters
|
|
on the line, and point is at the beginning of the line, Readline
|
|
interprets it as the end of input and returns <small class="sc">EOF</small>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-delete_002dchar-_0028C_002dd_0029"></a><span><code class="code">delete-char (C-d)</code><a class="copiable-link" href="#index-delete_002dchar-_0028C_002dd_0029"> ¶</a></span></dt>
|
|
<dd><p>Delete the character at point.
|
|
If this function is bound to the
|
|
same character as the tty <small class="sc">EOF</small> character, as <kbd class="kbd">C-d</kbd>
|
|
commonly is, see above for the effects.
|
|
This may also be bound to the Delete key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-backward_002ddelete_002dchar-_0028Rubout_0029"></a><span><code class="code">backward-delete-char (Rubout)</code><a class="copiable-link" href="#index-backward_002ddelete_002dchar-_0028Rubout_0029"> ¶</a></span></dt>
|
|
<dd><p>Delete the character behind the cursor.
|
|
A numeric argument means
|
|
to kill the characters, saving them on the kill ring,
|
|
instead of deleting them.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-forward_002dbackward_002ddelete_002dchar-_0028_0029"></a><span><code class="code">forward-backward-delete-char ()</code><a class="copiable-link" href="#index-forward_002dbackward_002ddelete_002dchar-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Delete the character under the cursor, unless the cursor is at the
|
|
end of the line, in which case the character behind the cursor is
|
|
deleted.
|
|
By default, this is not bound to a key.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"></a><span><code class="code">quoted-insert (C-q or C-v)</code><a class="copiable-link" href="#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"> ¶</a></span></dt>
|
|
<dd><p>Add the next character typed to the line verbatim.
|
|
This is how to insert key sequences like <kbd class="kbd">C-q</kbd>, for example.
|
|
</p>
|
|
|
|
</dd>
|
|
<dt><a id="index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_002e_002e_002e_0029"></a><span><code class="code">self-insert (a, b, A, 1, !, …)</code><a class="copiable-link" href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_002e_002e_002e_0029"> ¶</a></span></dt>
|
|
<dd><p>Insert the character typed.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-bracketed_002dpaste_002dbegin-_0028_0029"></a><span><code class="code">bracketed-paste-begin ()</code><a class="copiable-link" href="#index-bracketed_002dpaste_002dbegin-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>This function is intended to be bound to the "bracketed paste" escape
|
|
sequence sent by some terminals, and such a binding is assigned by default.
|
|
It allows Readline to insert the pasted text as a single unit without treating
|
|
each character as if it had been read from the keyboard.
|
|
The characters
|
|
are inserted as if each one was bound to <code class="code">self-insert</code> instead of
|
|
executing any editing commands.
|
|
</p>
|
|
<p>Bracketed paste sets the region (the characters between point and the mark)
|
|
to the inserted text.
|
|
It sets the <em class="emph">active region</em>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-transpose_002dchars-_0028C_002dt_0029"></a><span><code class="code">transpose-chars (C-t)</code><a class="copiable-link" href="#index-transpose_002dchars-_0028C_002dt_0029"> ¶</a></span></dt>
|
|
<dd><p>Drag the character before the cursor forward over
|
|
the character at the cursor, moving the
|
|
cursor forward as well.
|
|
If the insertion point
|
|
is at the end of the line, then this
|
|
transposes the last two characters of the line.
|
|
Negative arguments have no effect.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-transpose_002dwords-_0028M_002dt_0029"></a><span><code class="code">transpose-words (M-t)</code><a class="copiable-link" href="#index-transpose_002dwords-_0028M_002dt_0029"> ¶</a></span></dt>
|
|
<dd><p>Drag the word before point past the word after point,
|
|
moving point past that word as well.
|
|
If the insertion point is at the end of the line, this transposes
|
|
the last two words on the line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"></a><span><code class="code">shell-transpose-words (M-C-t)</code><a class="copiable-link" href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"> ¶</a></span></dt>
|
|
<dd><p>Drag the word before point past the word after point,
|
|
moving point past that word as well.
|
|
If the insertion point is at the end of the line, this transposes
|
|
the last two words on the line.
|
|
Word boundaries are the same as <code class="code">shell-forward-word</code> and
|
|
<code class="code">shell-backward-word</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-upcase_002dword-_0028M_002du_0029"></a><span><code class="code">upcase-word (M-u)</code><a class="copiable-link" href="#index-upcase_002dword-_0028M_002du_0029"> ¶</a></span></dt>
|
|
<dd><p>Uppercase the current (or following) word.
|
|
With a negative argument,
|
|
uppercase the previous word, but do not move the cursor.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-downcase_002dword-_0028M_002dl_0029"></a><span><code class="code">downcase-word (M-l)</code><a class="copiable-link" href="#index-downcase_002dword-_0028M_002dl_0029"> ¶</a></span></dt>
|
|
<dd><p>Lowercase the current (or following) word.
|
|
With a negative argument,
|
|
lowercase the previous word, but do not move the cursor.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-capitalize_002dword-_0028M_002dc_0029"></a><span><code class="code">capitalize-word (M-c)</code><a class="copiable-link" href="#index-capitalize_002dword-_0028M_002dc_0029"> ¶</a></span></dt>
|
|
<dd><p>Capitalize the current (or following) word.
|
|
With a negative argument,
|
|
capitalize the previous word, but do not move the cursor.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-overwrite_002dmode-_0028_0029"></a><span><code class="code">overwrite-mode ()</code><a class="copiable-link" href="#index-overwrite_002dmode-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Toggle overwrite mode.
|
|
With an explicit positive numeric argument, switches to overwrite mode.
|
|
With an explicit non-positive numeric argument, switches to insert mode.
|
|
This command affects only <code class="code">emacs</code> mode;
|
|
<code class="code">vi</code> mode does overwrite differently.
|
|
Each call to <code class="code">readline()</code> starts in insert mode.
|
|
</p>
|
|
<p>In overwrite mode, characters bound to <code class="code">self-insert</code> replace
|
|
the text at point rather than pushing the text to the right.
|
|
Characters bound to <code class="code">backward-delete-char</code> replace the character
|
|
before point with a space.
|
|
</p>
|
|
<p>By default, this command is unbound, but may be bound to the Insert
|
|
key on some keyboards.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Commands-For-Killing">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Numeric-Arguments" accesskey="n" rel="next">Specifying Numeric Arguments</a>, Previous: <a href="#Commands-For-Text" accesskey="p" rel="prev">Commands For Changing Text</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Killing-And-Yanking"><span>8.4.4 Killing And Yanking<a class="copiable-link" href="#Killing-And-Yanking"> ¶</a></span></h4>
|
|
|
|
<dl class="ftable">
|
|
<dt><a id="index-kill_002dline-_0028C_002dk_0029"></a><span><code class="code">kill-line (C-k)</code><a class="copiable-link" href="#index-kill_002dline-_0028C_002dk_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill the text from point to the end of the current line.
|
|
With a negative numeric argument, kill backward from the cursor to the
|
|
beginning of the line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"></a><span><code class="code">backward-kill-line (C-x Rubout)</code><a class="copiable-link" href="#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill backward from the cursor to the beginning of the current line.
|
|
With a negative numeric argument, kill forward from the cursor to the
|
|
end of the line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-unix_002dline_002ddiscard-_0028C_002du_0029"></a><span><code class="code">unix-line-discard (C-u)</code><a class="copiable-link" href="#index-unix_002dline_002ddiscard-_0028C_002du_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill backward from the cursor to the beginning of the current line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-kill_002dwhole_002dline-_0028_0029"></a><span><code class="code">kill-whole-line ()</code><a class="copiable-link" href="#index-kill_002dwhole_002dline-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill all characters on the current line, no matter where point is.
|
|
By default, this is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-kill_002dword-_0028M_002dd_0029"></a><span><code class="code">kill-word (M-d)</code><a class="copiable-link" href="#index-kill_002dword-_0028M_002dd_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill from point to the end of the current word, or if between
|
|
words, to the end of the next word.
|
|
Word boundaries are the same as <code class="code">forward-word</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-backward_002dkill_002dword-_0028M_002dDEL_0029"></a><span><code class="code">backward-kill-word (M-<kbd class="key">DEL</kbd>)</code><a class="copiable-link" href="#index-backward_002dkill_002dword-_0028M_002dDEL_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill the word behind point.
|
|
Word boundaries are the same as <code class="code">backward-word</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"></a><span><code class="code">shell-kill-word (M-C-d)</code><a class="copiable-link" href="#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill from point to the end of the current word, or if between
|
|
words, to the end of the next word.
|
|
Word boundaries are the same as <code class="code">shell-forward-word</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-shell_002dbackward_002dkill_002dword-_0028_0029"></a><span><code class="code">shell-backward-kill-word ()</code><a class="copiable-link" href="#index-shell_002dbackward_002dkill_002dword-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill the word behind point.
|
|
Word boundaries are the same as <code class="code">shell-backward-word</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-unix_002dword_002drubout-_0028C_002dw_0029"></a><span><code class="code">unix-word-rubout (C-w)</code><a class="copiable-link" href="#index-unix_002dword_002drubout-_0028C_002dw_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill the word behind point, using white space as a word boundary,
|
|
saving the killed text on the kill-ring.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-unix_002dfilename_002drubout-_0028_0029"></a><span><code class="code">unix-filename-rubout ()</code><a class="copiable-link" href="#index-unix_002dfilename_002drubout-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill the word behind point, using white space and the slash character
|
|
as the word boundaries,
|
|
saving the killed text on the kill-ring.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-delete_002dhorizontal_002dspace-_0028_0029"></a><span><code class="code">delete-horizontal-space ()</code><a class="copiable-link" href="#index-delete_002dhorizontal_002dspace-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Delete all spaces and tabs around point.
|
|
By default, this is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-kill_002dregion-_0028_0029"></a><span><code class="code">kill-region ()</code><a class="copiable-link" href="#index-kill_002dregion-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Kill the text in the current region.
|
|
By default, this command is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-copy_002dregion_002das_002dkill-_0028_0029"></a><span><code class="code">copy-region-as-kill ()</code><a class="copiable-link" href="#index-copy_002dregion_002das_002dkill-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Copy the text in the region to the kill buffer, so it can be yanked
|
|
right away.
|
|
By default, this command is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-copy_002dbackward_002dword-_0028_0029"></a><span><code class="code">copy-backward-word ()</code><a class="copiable-link" href="#index-copy_002dbackward_002dword-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Copy the word before point to the kill buffer.
|
|
The word boundaries are the same as <code class="code">backward-word</code>.
|
|
By default, this command is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-copy_002dforward_002dword-_0028_0029"></a><span><code class="code">copy-forward-word ()</code><a class="copiable-link" href="#index-copy_002dforward_002dword-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Copy the word following point to the kill buffer.
|
|
The word boundaries are the same as <code class="code">forward-word</code>.
|
|
By default, this command is unbound.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-yank-_0028C_002dy_0029"></a><span><code class="code">yank (C-y)</code><a class="copiable-link" href="#index-yank-_0028C_002dy_0029"> ¶</a></span></dt>
|
|
<dd><p>Yank the top of the kill ring into the buffer at point.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-yank_002dpop-_0028M_002dy_0029"></a><span><code class="code">yank-pop (M-y)</code><a class="copiable-link" href="#index-yank_002dpop-_0028M_002dy_0029"> ¶</a></span></dt>
|
|
<dd><p>Rotate the kill-ring, and yank the new top.
|
|
You can only do this if
|
|
the prior command is <code class="code">yank</code> or <code class="code">yank-pop</code>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Numeric-Arguments">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Commands-For-Completion" accesskey="n" rel="next">Letting Readline Type For You</a>, Previous: <a href="#Commands-For-Killing" accesskey="p" rel="prev">Killing And Yanking</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Specifying-Numeric-Arguments"><span>8.4.5 Specifying Numeric Arguments<a class="copiable-link" href="#Specifying-Numeric-Arguments"> ¶</a></span></h4>
|
|
<dl class="ftable">
|
|
<dt><a id="index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_002e_002e_002e-M_002d_002d_0029"></a><span><code class="code">digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, … <kbd class="kbd">M--</kbd>)</code><a class="copiable-link" href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_002e_002e_002e-M_002d_002d_0029"> ¶</a></span></dt>
|
|
<dd><p>Add this digit to the argument already accumulating, or start a new
|
|
argument.
|
|
<kbd class="kbd">M--</kbd> starts a negative argument.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-universal_002dargument-_0028_0029"></a><span><code class="code">universal-argument ()</code><a class="copiable-link" href="#index-universal_002dargument-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>This is another way to specify an argument.
|
|
If this command is followed by one or more digits, optionally with a
|
|
leading minus sign, those digits define the argument.
|
|
If the command is followed by digits, executing <code class="code">universal-argument</code>
|
|
again ends the numeric argument, but is otherwise ignored.
|
|
As a special case, if this command is immediately followed by a
|
|
character that is neither a digit nor minus sign, the argument count
|
|
for the next command is multiplied by four.
|
|
The argument count is initially one, so executing this function the
|
|
first time makes the argument count four, a second time makes the
|
|
argument count sixteen, and so on.
|
|
By default, this is not bound to a key.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Commands-For-Completion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Keyboard-Macros" accesskey="n" rel="next">Keyboard Macros</a>, Previous: <a href="#Numeric-Arguments" accesskey="p" rel="prev">Specifying Numeric Arguments</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Letting-Readline-Type-For-You"><span>8.4.6 Letting Readline Type For You<a class="copiable-link" href="#Letting-Readline-Type-For-You"> ¶</a></span></h4>
|
|
|
|
<dl class="ftable">
|
|
<dt><a id="index-complete-_0028TAB_0029"></a><span><code class="code">complete (<kbd class="key">TAB</kbd>)</code><a class="copiable-link" href="#index-complete-_0028TAB_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt to perform completion on the text before point.
|
|
The actual completion performed is application-specific.
|
|
Bash attempts completion by first checking for any programmable
|
|
completions for the command word (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>),
|
|
otherwise treating the text as a
|
|
variable (if the text begins with ‘<samp class="samp">$</samp>’),
|
|
username (if the text begins with ‘<samp class="samp">~</samp>’),
|
|
hostname (if the text begins with ‘<samp class="samp">@</samp>’), or
|
|
command (including aliases, functions, and builtins) in turn.
|
|
If none of these produces a match, it falls back to filename completion.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-possible_002dcompletions-_0028M_002d_003f_0029"></a><span><code class="code">possible-completions (M-?)</code><a class="copiable-link" href="#index-possible_002dcompletions-_0028M_002d_003f_0029"> ¶</a></span></dt>
|
|
<dd><p>List the possible completions of the text before point.
|
|
When displaying completions, Readline sets the number of columns used
|
|
for display to the value of <code class="code">completion-display-width</code>, the value of
|
|
the environment variable <code class="env">COLUMNS</code>, or the screen width, in that order.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-insert_002dcompletions-_0028M_002d_002a_0029"></a><span><code class="code">insert-completions (M-*)</code><a class="copiable-link" href="#index-insert_002dcompletions-_0028M_002d_002a_0029"> ¶</a></span></dt>
|
|
<dd><p>Insert all completions of the text before point that would have
|
|
been generated by <code class="code">possible-completions</code>,
|
|
separated by a space.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-menu_002dcomplete-_0028_0029"></a><span><code class="code">menu-complete ()</code><a class="copiable-link" href="#index-menu_002dcomplete-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Similar to <code class="code">complete</code>, but replaces the word to be completed
|
|
with a single match from the list of possible completions.
|
|
Repeatedly executing <code class="code">menu-complete</code> steps through the list
|
|
of possible completions, inserting each match in turn.
|
|
At the end of the list of completions,
|
|
<code class="code">menu-complete</code> rings the bell
|
|
(subject to the setting of <code class="code">bell-style</code>)
|
|
and restores the original text.
|
|
An argument of <var class="var">n</var> moves <var class="var">n</var> positions forward in the list
|
|
of matches; a negative argument moves backward through the list.
|
|
This command is intended to be bound to <kbd class="key">TAB</kbd>, but is unbound
|
|
by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-menu_002dcomplete_002dbackward-_0028_0029"></a><span><code class="code">menu-complete-backward ()</code><a class="copiable-link" href="#index-menu_002dcomplete_002dbackward-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Identical to <code class="code">menu-complete</code>, but moves backward through the list
|
|
of possible completions, as if <code class="code">menu-complete</code> had been given a
|
|
negative argument.
|
|
This command is unbound by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-export_002dcompletions-_0028_0029"></a><span><code class="code">export-completions ()</code><a class="copiable-link" href="#index-export_002dcompletions-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform completion on the word before point as described above
|
|
and write the list of possible completions to Readline’s output stream
|
|
using the following format, writing information on separate lines:
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>the number of matches <var class="var">N</var>;
|
|
</li><li>the word being completed;
|
|
</li><li><var class="var">S</var>:<var class="var">E</var>,
|
|
where <var class="var">S</var> and <var class="var">E</var> are the start and end offsets of the word
|
|
in the Readline line buffer; then
|
|
</li><li>each match, one per line
|
|
</li></ul>
|
|
|
|
<p>If there are no matches, the first line will be “0”,
|
|
and this command does not print any output after the <var class="var">S</var>:<var class="var">E</var>.
|
|
If there is only a single match, this prints a single line containing it.
|
|
If there is more than one match, this prints the common prefix of the
|
|
matches, which may be empty, on the first line after the <var class="var">S</var>:<var class="var">E</var>,
|
|
then the matches on subsequent lines.
|
|
In this case, <var class="var">N</var> will include the first line with the common prefix.
|
|
</p>
|
|
<p>The user or application
|
|
should be able to accommodate the possibility of a blank line.
|
|
The intent is that the user or application reads <var class="var">N</var> lines after
|
|
the line containing <var class="var">S</var>:<var class="var">E</var> to obtain the match list.
|
|
This command is unbound by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-delete_002dchar_002dor_002dlist-_0028_0029"></a><span><code class="code">delete-char-or-list ()</code><a class="copiable-link" href="#index-delete_002dchar_002dor_002dlist-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Deletes the character under the cursor if not at the beginning or
|
|
end of the line (like <code class="code">delete-char</code>).
|
|
At the end of the line, it behaves identically to <code class="code">possible-completions</code>.
|
|
This command is unbound by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-complete_002dfilename-_0028M_002d_002f_0029"></a><span><code class="code">complete-filename (M-/)</code><a class="copiable-link" href="#index-complete_002dfilename-_0028M_002d_002f_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt filename completion on the text before point.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"></a><span><code class="code">possible-filename-completions (C-x /)</code><a class="copiable-link" href="#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"> ¶</a></span></dt>
|
|
<dd><p>List the possible completions of the text before point,
|
|
treating it as a filename.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-complete_002dusername-_0028M_002d_007e_0029"></a><span><code class="code">complete-username (M-~)</code><a class="copiable-link" href="#index-complete_002dusername-_0028M_002d_007e_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt completion on the text before point, treating
|
|
it as a username.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"></a><span><code class="code">possible-username-completions (C-x ~)</code><a class="copiable-link" href="#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"> ¶</a></span></dt>
|
|
<dd><p>List the possible completions of the text before point,
|
|
treating it as a username.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-complete_002dvariable-_0028M_002d_0024_0029"></a><span><code class="code">complete-variable (M-$)</code><a class="copiable-link" href="#index-complete_002dvariable-_0028M_002d_0024_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt completion on the text before point, treating
|
|
it as a shell variable.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"></a><span><code class="code">possible-variable-completions (C-x $)</code><a class="copiable-link" href="#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"> ¶</a></span></dt>
|
|
<dd><p>List the possible completions of the text before point,
|
|
treating it as a shell variable.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-complete_002dhostname-_0028M_002d_0040_0029"></a><span><code class="code">complete-hostname (M-@)</code><a class="copiable-link" href="#index-complete_002dhostname-_0028M_002d_0040_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt completion on the text before point, treating
|
|
it as a hostname.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"></a><span><code class="code">possible-hostname-completions (C-x @)</code><a class="copiable-link" href="#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"> ¶</a></span></dt>
|
|
<dd><p>List the possible completions of the text before point,
|
|
treating it as a hostname.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-complete_002dcommand-_0028M_002d_0021_0029"></a><span><code class="code">complete-command (M-!)</code><a class="copiable-link" href="#index-complete_002dcommand-_0028M_002d_0021_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt completion on the text before point, treating
|
|
it as a command name.
|
|
Command completion attempts to
|
|
match the text against aliases, reserved words, shell
|
|
functions, shell builtins, and finally executable filenames,
|
|
in that order.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"></a><span><code class="code">possible-command-completions (C-x !)</code><a class="copiable-link" href="#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"> ¶</a></span></dt>
|
|
<dd><p>List the possible completions of the text before point,
|
|
treating it as a command name.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"></a><span><code class="code">dynamic-complete-history (M-<kbd class="key">TAB</kbd>)</code><a class="copiable-link" href="#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt completion on the text before point, comparing
|
|
the text against history list entries for possible
|
|
completion matches.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-dabbrev_002dexpand-_0028_0029"></a><span><code class="code">dabbrev-expand ()</code><a class="copiable-link" href="#index-dabbrev_002dexpand-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Attempt menu completion on the text before point, comparing
|
|
the text against lines from the history list for possible
|
|
completion matches.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"></a><span><code class="code">complete-into-braces (M-{)</code><a class="copiable-link" href="#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform filename completion and insert the list of possible completions
|
|
enclosed within braces so the list is available to the shell
|
|
(see <a class="pxref" href="#Brace-Expansion">Brace Expansion</a>).
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Keyboard-Macros">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Miscellaneous-Commands" accesskey="n" rel="next">Some Miscellaneous Commands</a>, Previous: <a href="#Commands-For-Completion" accesskey="p" rel="prev">Letting Readline Type For You</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Keyboard-Macros-1"><span>8.4.7 Keyboard Macros<a class="copiable-link" href="#Keyboard-Macros-1"> ¶</a></span></h4>
|
|
<dl class="ftable">
|
|
<dt><a id="index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"></a><span><code class="code">start-kbd-macro (C-x ()</code><a class="copiable-link" href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Begin saving the characters typed into the current keyboard macro.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"></a><span><code class="code">end-kbd-macro (C-x ))</code><a class="copiable-link" href="#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"> ¶</a></span></dt>
|
|
<dd><p>Stop saving the characters typed into the current keyboard macro
|
|
and save the definition.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"></a><span><code class="code">call-last-kbd-macro (C-x e)</code><a class="copiable-link" href="#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"> ¶</a></span></dt>
|
|
<dd><p>Re-execute the last keyboard macro defined, by making the characters
|
|
in the macro appear as if typed at the keyboard.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-print_002dlast_002dkbd_002dmacro-_0028_0029"></a><span><code class="code">print-last-kbd-macro ()</code><a class="copiable-link" href="#index-print_002dlast_002dkbd_002dmacro-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Print the last keyboard macro defined in a format suitable for the
|
|
<var class="var">inputrc</var> file.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Miscellaneous-Commands">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Keyboard-Macros" accesskey="p" rel="prev">Keyboard Macros</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Some-Miscellaneous-Commands"><span>8.4.8 Some Miscellaneous Commands<a class="copiable-link" href="#Some-Miscellaneous-Commands"> ¶</a></span></h4>
|
|
<dl class="ftable">
|
|
<dt><a id="index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"></a><span><code class="code">re-read-init-file (C-x C-r)</code><a class="copiable-link" href="#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"> ¶</a></span></dt>
|
|
<dd><p>Read in the contents of the <var class="var">inputrc</var> file, and incorporate
|
|
any bindings or variable assignments found there.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-abort-_0028C_002dg_0029"></a><span><code class="code">abort (C-g)</code><a class="copiable-link" href="#index-abort-_0028C_002dg_0029"> ¶</a></span></dt>
|
|
<dd><p>Abort the current editing command and
|
|
ring the terminal’s bell (subject to the setting of
|
|
<code class="code">bell-style</code>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_002e_002e_002e_0029"></a><span><code class="code">do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, …)</code><a class="copiable-link" href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_002e_002e_002e_0029"> ¶</a></span></dt>
|
|
<dd><p>If the metafied character <var class="var">x</var> is upper case, run the command
|
|
that is bound to the corresponding metafied lower case character.
|
|
The behavior is undefined if <var class="var">x</var> is already lower case.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-prefix_002dmeta-_0028ESC_0029"></a><span><code class="code">prefix-meta (<kbd class="key">ESC</kbd>)</code><a class="copiable-link" href="#index-prefix_002dmeta-_0028ESC_0029"> ¶</a></span></dt>
|
|
<dd><p>Metafy the next character typed.
|
|
Typing ‘<samp class="samp"><kbd class="key">ESC</kbd> f</samp>’ is equivalent to typing <kbd class="kbd">M-f</kbd>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"></a><span><code class="code">undo (C-_ or C-x C-u)</code><a class="copiable-link" href="#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"> ¶</a></span></dt>
|
|
<dd><p>Incremental undo, separately remembered for each line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-revert_002dline-_0028M_002dr_0029"></a><span><code class="code">revert-line (M-r)</code><a class="copiable-link" href="#index-revert_002dline-_0028M_002dr_0029"> ¶</a></span></dt>
|
|
<dd><p>Undo all changes made to this line.
|
|
This is like executing the <code class="code">undo</code>
|
|
command enough times to get back to the initial state.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-tilde_002dexpand-_0028M_002d_0026_0029"></a><span><code class="code">tilde-expand (M-&)</code><a class="copiable-link" href="#index-tilde_002dexpand-_0028M_002d_0026_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform tilde expansion on the current word.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-set_002dmark-_0028C_002d_0040_0029"></a><span><code class="code">set-mark (C-@)</code><a class="copiable-link" href="#index-set_002dmark-_0028C_002d_0040_0029"> ¶</a></span></dt>
|
|
<dd><p>Set the mark to the point.
|
|
If a numeric argument is supplied, set the mark to that position.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"></a><span><code class="code">exchange-point-and-mark (C-x C-x)</code><a class="copiable-link" href="#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"> ¶</a></span></dt>
|
|
<dd><p>Swap the point with the mark.
|
|
Set the current cursor position to the saved position,
|
|
then set the mark to the old cursor position.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-character_002dsearch-_0028C_002d_005d_0029"></a><span><code class="code">character-search (C-])</code><a class="copiable-link" href="#index-character_002dsearch-_0028C_002d_005d_0029"> ¶</a></span></dt>
|
|
<dd><p>Read a character and move point to the next occurrence of that character.
|
|
A negative argument searches for previous occurrences.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"></a><span><code class="code">character-search-backward (M-C-])</code><a class="copiable-link" href="#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"> ¶</a></span></dt>
|
|
<dd><p>Read a character and move point to the previous occurrence of that character.
|
|
A negative argument searches for subsequent occurrences.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-skip_002dcsi_002dsequence-_0028_0029"></a><span><code class="code">skip-csi-sequence ()</code><a class="copiable-link" href="#index-skip_002dcsi_002dsequence-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Read enough characters to consume a multi-key sequence such as those
|
|
defined for keys like Home and End.
|
|
CSI sequences begin with a Control Sequence Indicator (CSI), usually
|
|
<kbd class="kbd">ESC [</kbd>.
|
|
If this sequence is bound to "\e[",
|
|
keys producing CSI sequences have no effect
|
|
unless explicitly bound to a Readline command,
|
|
instead of inserting stray characters into the editing buffer.
|
|
This is unbound by default, but usually bound to
|
|
<kbd class="kbd">ESC [</kbd>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-insert_002dcomment-_0028M_002d_0023_0029"></a><span><code class="code">insert-comment (M-#)</code><a class="copiable-link" href="#index-insert_002dcomment-_0028M_002d_0023_0029"> ¶</a></span></dt>
|
|
<dd><p>Without a numeric argument, insert the value of the <code class="code">comment-begin</code>
|
|
variable at the beginning of the current line.
|
|
If a numeric argument is supplied, this command acts as a toggle: if
|
|
the characters at the beginning of the line do not match the value
|
|
of <code class="code">comment-begin</code>, insert the value; otherwise delete
|
|
the characters in <code class="code">comment-begin</code> from the beginning of the line.
|
|
In either case, the line is accepted as if a newline had been typed.
|
|
The default value of <code class="code">comment-begin</code> causes this command
|
|
to make the current line a shell comment.
|
|
If a numeric argument causes the comment character to be removed, the line
|
|
will be executed by the shell.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-dump_002dfunctions-_0028_0029"></a><span><code class="code">dump-functions ()</code><a class="copiable-link" href="#index-dump_002dfunctions-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Print all of the functions and their key bindings
|
|
to the Readline output stream.
|
|
If a numeric argument is supplied,
|
|
the output is formatted in such a way that it can be made part
|
|
of an <var class="var">inputrc</var> file.
|
|
This command is unbound by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-dump_002dvariables-_0028_0029"></a><span><code class="code">dump-variables ()</code><a class="copiable-link" href="#index-dump_002dvariables-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Print all of the settable variables and their values
|
|
to the Readline output stream.
|
|
If a numeric argument is supplied,
|
|
the output is formatted in such a way that it can be made part
|
|
of an <var class="var">inputrc</var> file.
|
|
This command is unbound by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-dump_002dmacros-_0028_0029"></a><span><code class="code">dump-macros ()</code><a class="copiable-link" href="#index-dump_002dmacros-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Print all of the Readline key sequences bound to macros and the
|
|
strings they output
|
|
to the Readline output stream.
|
|
If a numeric argument is supplied,
|
|
the output is formatted in such a way that it can be made part
|
|
of an <var class="var">inputrc</var> file.
|
|
This command is unbound by default.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-execute_002dnamed_002dcommand-_0028M_002dx_0029"></a><span><code class="code">execute-named-command (M-x)</code><a class="copiable-link" href="#index-execute_002dnamed_002dcommand-_0028M_002dx_0029"> ¶</a></span></dt>
|
|
<dd><p>Read a bindable Readline command name from the input and execute the
|
|
function to which it’s bound, as if the key sequence to which it was
|
|
bound appeared in the input.
|
|
If this function is supplied with a numeric argument, it passes that
|
|
argument to the function it executes.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"></a><span><code class="code">spell-correct-word (C-x s)</code><a class="copiable-link" href="#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform spelling correction on the current word, treating it as a directory
|
|
or filename, in the same way as the <code class="code">cdspell</code> shell option.
|
|
Word boundaries are the same as those used by <code class="code">shell-forward-word</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-glob_002dcomplete_002dword-_0028M_002dg_0029"></a><span><code class="code">glob-complete-word (M-g)</code><a class="copiable-link" href="#index-glob_002dcomplete_002dword-_0028M_002dg_0029"> ¶</a></span></dt>
|
|
<dd><p>Treat the word before point as a pattern for pathname expansion,
|
|
with an asterisk implicitly appended, then use the pattern to
|
|
generate a list of matching file names for possible completions.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"></a><span><code class="code">glob-expand-word (C-x *)</code><a class="copiable-link" href="#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"> ¶</a></span></dt>
|
|
<dd><p>Treat the word before point as a pattern for pathname expansion,
|
|
and insert the list of matching file names, replacing the word.
|
|
If a numeric argument is supplied, append a ‘<samp class="samp">*</samp>’ before
|
|
pathname expansion.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"></a><span><code class="code">glob-list-expansions (C-x g)</code><a class="copiable-link" href="#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"> ¶</a></span></dt>
|
|
<dd><p>Display the list of expansions that would have been generated by
|
|
<code class="code">glob-expand-word</code>, and redisplay the line.
|
|
If a numeric argument is supplied, append a ‘<samp class="samp">*</samp>’ before
|
|
pathname expansion.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"></a><span><code class="code">shell-expand-line (M-C-e)</code><a class="copiable-link" href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"> ¶</a></span></dt>
|
|
<dd><p>Expand the line by performing shell word expansions.
|
|
This performs alias and history expansion,
|
|
$’<var class="var">string</var>’ and $"<var class="var">string</var>" quoting,
|
|
tilde expansion, parameter and variable expansion, arithmetic expansion,
|
|
command and process substitution,
|
|
word splitting, and quote removal.
|
|
An explicit argument suppresses command and process substitution.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dexpand_002dline-_0028M_002d_005e_0029"></a><span><code class="code">history-expand-line (M-^)</code><a class="copiable-link" href="#index-history_002dexpand_002dline-_0028M_002d_005e_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform history expansion on the current line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-magic_002dspace-_0028_0029"></a><span><code class="code">magic-space ()</code><a class="copiable-link" href="#index-magic_002dspace-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform history expansion on the current line and insert a space
|
|
(see <a class="pxref" href="#History-Interaction">History Expansion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-alias_002dexpand_002dline-_0028_0029"></a><span><code class="code">alias-expand-line ()</code><a class="copiable-link" href="#index-alias_002dexpand_002dline-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform alias expansion on the current line (see <a class="pxref" href="#Aliases">Aliases</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"></a><span><code class="code">history-and-alias-expand-line ()</code><a class="copiable-link" href="#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"> ¶</a></span></dt>
|
|
<dd><p>Perform history and alias expansion on the current line.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"></a><span><code class="code">insert-last-argument (M-. or M-_)</code><a class="copiable-link" href="#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"> ¶</a></span></dt>
|
|
<dd><p>A synonym for <code class="code">yank-last-arg</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"></a><span><code class="code">edit-and-execute-command (C-x C-e)</code><a class="copiable-link" href="#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"> ¶</a></span></dt>
|
|
<dd><p>Invoke an editor on the current command line, and execute the result as shell
|
|
commands.
|
|
Bash attempts to invoke
|
|
<code class="code">$VISUAL</code>, <code class="code">$EDITOR</code>, and <code class="code">emacs</code>
|
|
as the editor, in that order.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"></a><span><code class="code">display-shell-version (C-x C-v)</code><a class="copiable-link" href="#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"> ¶</a></span></dt>
|
|
<dd><p>Display version information about the current instance of Bash.
|
|
</p>
|
|
|
|
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="section-level-extent" id="Readline-vi-Mode">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Programmable-Completion" accesskey="n" rel="next">Programmable Completion</a>, Previous: <a href="#Bindable-Readline-Commands" accesskey="p" rel="prev">Bindable Readline Commands</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Readline-vi-Mode-1"><span>8.5 Readline vi Mode<a class="copiable-link" href="#Readline-vi-Mode-1"> ¶</a></span></h3>
|
|
|
|
<p>While the Readline library does not have a full set of <code class="code">vi</code>
|
|
editing functions, it does contain enough to allow simple editing
|
|
of the line.
|
|
The Readline <code class="code">vi</code> mode behaves as specified in the
|
|
<code class="code">sh</code> description in the <small class="sc">POSIX</small> standard.
|
|
</p>
|
|
<p>You can use the ‘<samp class="samp">set -o emacs</samp>’ and ‘<samp class="samp">set -o vi</samp>’
|
|
commands (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>)
|
|
to switch interactively between <code class="code">emacs</code> and <code class="code">vi</code>
|
|
editing modes,
|
|
The Readline default is <code class="code">emacs</code> mode.
|
|
</p>
|
|
<p>When you enter a line in <code class="code">vi</code> mode, you are already placed in
|
|
“insertion” mode, as if you had typed an ‘<samp class="samp">i</samp>’. Pressing <kbd class="key">ESC</kbd>
|
|
switches you into “command” mode, where you can edit the text of the
|
|
line with the standard <code class="code">vi</code> movement keys, move to previous
|
|
history lines with ‘<samp class="samp">k</samp>’ and subsequent lines with ‘<samp class="samp">j</samp>’, and
|
|
so forth.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Programmable-Completion">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Programmable-Completion-Builtins" accesskey="n" rel="next">Programmable Completion Builtins</a>, Previous: <a href="#Readline-vi-Mode" accesskey="p" rel="prev">Readline vi Mode</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Programmable-Completion-1"><span>8.6 Programmable Completion<a class="copiable-link" href="#Programmable-Completion-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-programmable-completion"></a>
|
|
|
|
<p>When the user attempts word completion
|
|
for a command or an argument to a command for which a
|
|
completion specification (a <em class="dfn">compspec</em>) has been defined
|
|
using the <code class="code">complete</code> builtin
|
|
(see <a class="pxref" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>),
|
|
Readline invokes the programmable completion facilities.
|
|
</p>
|
|
<p>First, Bash identifies the command name.
|
|
If a compspec has been defined for that command, the
|
|
compspec is used to generate the list of possible completions for the word.
|
|
If the command word is the empty string (completion attempted at the
|
|
beginning of an empty line), Bash uses any compspec defined with
|
|
the <samp class="option">-E</samp> option to <code class="code">complete</code>.
|
|
The <samp class="option">-I</samp> option to <code class="code">complete</code>
|
|
indicates that the command word is the first non-assignment word
|
|
on the line, or after a command delimiter such as
|
|
‘<samp class="samp">;</samp>’ or ‘<samp class="samp">|</samp>’.
|
|
This usually indicates command name completion.
|
|
</p>
|
|
<p>If the command word is a full pathname, Bash
|
|
searches for a compspec for the full pathname first.
|
|
If there is no compspec for the full pathname, Bash attempts to
|
|
find a compspec for the portion following the final slash.
|
|
If those searches do not result in a compspec,
|
|
or if there is no compspec for the command word,
|
|
Bash uses any compspec defined with
|
|
the <samp class="option">-D</samp> option to <code class="code">complete</code> as the default.
|
|
If there is no default compspec, Bash performs alias expansion
|
|
on the command word as a final resort,
|
|
and attempts to find a compspec for the command word
|
|
resulting from any successful expansion.
|
|
</p>
|
|
<p>If a compspec is not found, Bash performs its default completion
|
|
described above (see <a class="pxref" href="#Commands-For-Completion">Letting Readline Type For You</a>).
|
|
Otherwise, once a compspec has been found, Bash uses it to generate
|
|
the list of matching words.
|
|
</p>
|
|
<p>First, Bash performs the <var class="var">actions</var> specified by the compspec.
|
|
This only returns matches which are prefixes
|
|
of the word being completed.
|
|
When the <samp class="option">-f</samp> or <samp class="option">-d</samp> option is used for filename or
|
|
directory name completion, Bash uses shell the variable <code class="env">FIGNORE</code>
|
|
to filter the matches.
|
|
See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a description of <code class="env">FIGNORE</code>.
|
|
</p>
|
|
<p>Next, programmable completion generates matches
|
|
specified by a pathname expansion pattern
|
|
supplied as an argument to the
|
|
<samp class="option">-G</samp> option.
|
|
The words generated by the pattern need not match the word being completed.
|
|
Bash uses the <code class="env">FIGNORE</code>
|
|
variable to filter the matches, but does not use the
|
|
<code class="env">GLOBIGNORE</code> shell variable.
|
|
</p>
|
|
<p>Next, completion considers
|
|
the string specified as the argument to the <samp class="option">-W</samp> option.
|
|
The string is first split using the characters in the <code class="env">IFS</code>
|
|
special variable as delimiters.
|
|
This honors shell quoting within the string, in order to provide a
|
|
mechanism for the words to contain shell metacharacters or characters
|
|
in the value of <code class="env">IFS</code>.
|
|
Each word is then expanded using
|
|
brace expansion, tilde expansion, parameter and variable expansion,
|
|
command substitution, and arithmetic expansion,
|
|
as described above (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>).
|
|
The results are split using the rules described above
|
|
(see <a class="pxref" href="#Word-Splitting">Word Splitting</a>).
|
|
The results of the expansion are prefix-matched against the word being
|
|
completed, and the matching words become possible completions.
|
|
</p>
|
|
<p>After these matches have been generated,
|
|
Bash executes any shell function or command
|
|
specified with the <samp class="option">-F</samp> and <samp class="option">-C</samp> options.
|
|
When the command or function is invoked, Bash
|
|
assigns values to the
|
|
<code class="env">COMP_LINE</code>,
|
|
<code class="env">COMP_POINT</code>,
|
|
<code class="env">COMP_KEY</code>,
|
|
and
|
|
<code class="env">COMP_TYPE</code>
|
|
variables as described above
|
|
(see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
If a shell function is being invoked, Bash
|
|
also sets the
|
|
<code class="env">COMP_WORDS</code>
|
|
and
|
|
<code class="env">COMP_CWORD</code>
|
|
variables.
|
|
When the function or command is invoked,
|
|
the first argument ($1) is the name of the command whose arguments
|
|
are being completed,
|
|
the second argument ($2) is the word being completed,
|
|
and the third argument ($3) is the word preceding the word being
|
|
completed on the current command line.
|
|
There is no filtering of the generated completions against the
|
|
word being completed;
|
|
the function or command has complete freedom in generating the matches
|
|
and they do not need to match a prefix of the word.
|
|
</p>
|
|
<p>Any function specified with <samp class="option">-F</samp> is invoked first.
|
|
The function may use any of the shell facilities, including the
|
|
<code class="code">compgen</code> and <code class="code">compopt</code> builtins described below
|
|
(see <a class="pxref" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>), to generate the matches.
|
|
It must put the possible completions in the <code class="env">COMPREPLY</code> array
|
|
variable, one per array element.
|
|
</p>
|
|
<p>Next, any command specified with the <samp class="option">-C</samp> option is invoked
|
|
in an environment equivalent to command substitution.
|
|
It should print a list of completions, one per line, to
|
|
the standard output.
|
|
Backslash will escape a newline, if necessary.
|
|
These are added to the set of possible completions.
|
|
</p>
|
|
<p>External commands that are invoked to generate completions
|
|
("external completers")
|
|
receive the word preceding the completion word as an argument,
|
|
as described above.
|
|
This provides context that is sometimes useful, but may include
|
|
information that is considered sensitive or part of a word expansion
|
|
that will not appear in the command line after expansion.
|
|
That word may be visible in process listings or in audit logs.
|
|
This may be a concern to users and completion specification authors
|
|
if there is sensitive information on the command line before
|
|
expansion, since completion takes place before words are expanded.
|
|
If this is an issue, completion authors should use functions as
|
|
wrappers around external commands and pass context information to the
|
|
external command in a different way.
|
|
External completers can infer context from the <var class="var">COMP_LINE</var>
|
|
and <var class="var">COMP_POINT</var> environment variables, but they need to ensure
|
|
they break words in the same way Readline does, using the
|
|
<var class="var">COMP_WORDBREAKS</var> variable.
|
|
</p>
|
|
<p>After generating all of the possible completions,
|
|
Bash applies any filter
|
|
specified with the <samp class="option">-X</samp> option to the completions in the list.
|
|
The filter is a pattern as used for pathname expansion; a ‘<samp class="samp">&</samp>’
|
|
in the pattern is replaced with the text of the word being completed.
|
|
A literal ‘<samp class="samp">&</samp>’ may be escaped with a backslash; the backslash
|
|
is removed before attempting a match.
|
|
Any completion that matches the pattern is removed from the list.
|
|
A leading ‘<samp class="samp">!</samp>’ negates the pattern;
|
|
in this case Bash removes
|
|
any completion that does not match the pattern.
|
|
If the <code class="code">nocasematch</code> shell option is enabled
|
|
(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>),
|
|
Bash performs the match without regard to the case
|
|
of alphabetic characters.
|
|
</p>
|
|
<p>Finally, programmable completion adds
|
|
any prefix and suffix specified with the
|
|
<samp class="option">-P</samp> and <samp class="option">-S</samp>
|
|
options, respectively, to each completion,
|
|
and returns the result
|
|
to Readline as the list of possible completions.
|
|
</p>
|
|
<p>If the previously-applied actions do not generate any matches, and the
|
|
<samp class="option">-o dirnames</samp> option was supplied to <code class="code">complete</code> when the
|
|
compspec was defined, Bash attempts directory name completion.
|
|
</p>
|
|
<p>If the <samp class="option">-o plusdirs</samp> option was supplied to <code class="code">complete</code> when
|
|
the compspec was defined, Bash attempts directory name completion
|
|
and adds any matches to the set of possible completions.
|
|
</p>
|
|
<p>By default, if a compspec is found, whatever it generates is returned to
|
|
the completion code as the full set of possible completions.
|
|
The default Bash completions and the Readline default
|
|
of filename completion are disabled.
|
|
If the <samp class="option">-o bashdefault</samp> option was supplied to <code class="code">complete</code> when
|
|
the compspec was defined, and the compspec generates no matches,
|
|
Bash attempts its default completions.
|
|
If the compspec and, if attempted, the default Bash completions
|
|
generate no matches,
|
|
and the <samp class="option">-o default</samp> option was supplied to
|
|
<code class="code">complete</code> when the compspec was defined,
|
|
programmable completion performs Readline’s default completion.
|
|
</p>
|
|
<p>The options supplied to <code class="code">complete</code> and <code class="code">compopt</code>
|
|
can control how Readline treats the completions.
|
|
For instance, the <samp class="option">-o fullquote</samp> option tells Readline
|
|
to quote the matches as if they were filenames.
|
|
See the description of <code class="code">complete</code>
|
|
(see <a class="pxref" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>)
|
|
for details.
|
|
</p>
|
|
<p>When a compspec indicates that it wants directory name completion,
|
|
the programmable completion functions force Readline
|
|
to append a slash to completed names which are symbolic links
|
|
to directories, subject to the value of the
|
|
<var class="var">mark-directories</var> Readline variable,
|
|
regardless of the setting of the
|
|
<var class="var">mark-symlinked-directories</var> Readline variable.
|
|
</p>
|
|
<p>There is some support for dynamically modifying completions.
|
|
This is most useful when used in combination with a default completion
|
|
specified with <samp class="option">-D</samp>.
|
|
It’s possible for shell functions executed as completion functions
|
|
to indicate that completion should be retried by returning an
|
|
exit status of 124.
|
|
If a shell function returns 124, and changes
|
|
the compspec associated with the command on which completion is being
|
|
attempted (supplied as the first argument when the function is executed),
|
|
programmable completion restarts from the beginning, with an
|
|
attempt to find a new compspec for that command.
|
|
This can be used to build a set of completions dynamically
|
|
as completion is attempted, rather than loading them all at once.
|
|
</p>
|
|
<p>For instance, assuming that there is a library of compspecs, each kept in a
|
|
file corresponding to the name of the command, the following default
|
|
completion function would load completions dynamically:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">_completion_loader()
|
|
{
|
|
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
|
|
}
|
|
complete -D -F _completion_loader -o bashdefault -o default
|
|
</pre></div>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Programmable-Completion-Builtins">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#A-Programmable-Completion-Example" accesskey="n" rel="next">A Programmable Completion Example</a>, Previous: <a href="#Programmable-Completion" accesskey="p" rel="prev">Programmable Completion</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Programmable-Completion-Builtins-1"><span>8.7 Programmable Completion Builtins<a class="copiable-link" href="#Programmable-Completion-Builtins-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-completion-builtins"></a>
|
|
|
|
<p>Three builtin commands are available to manipulate the programmable completion
|
|
facilities: one to specify how the arguments to a particular command are to
|
|
be completed, and two to modify the completion as it is happening.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a id="index-compgen"></a><span><code class="code">compgen</code><a class="copiable-link" href="#index-compgen"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted"><code class="code">compgen [-V <var class="var">varname</var>] [<var class="var">option</var>] [<var class="var">word</var>]</code>
|
|
</pre></div>
|
|
|
|
<p>Generate possible completion matches for <var class="var">word</var> according to
|
|
the <var class="var">option</var>s, which may be any option accepted by the
|
|
<code class="code">complete</code>
|
|
builtin with the exceptions of
|
|
<samp class="option">-p</samp>,
|
|
<samp class="option">-r</samp>,
|
|
<samp class="option">-D</samp>,
|
|
<samp class="option">-E</samp>,
|
|
and
|
|
<samp class="option">-I</samp>,
|
|
and write the matches to the standard output.
|
|
</p>
|
|
<p>If the <samp class="option">-V</samp> option is supplied, <code class="code">compgen</code> stores the generated
|
|
completions into the indexed array variable <var class="var">varname</var> instead of writing
|
|
them to the standard output.
|
|
</p>
|
|
<p>When using the <samp class="option">-F</samp> or <samp class="option">-C</samp> options, the various shell variables
|
|
set by the programmable completion facilities, while available, will not
|
|
have useful values.
|
|
</p>
|
|
<p>The matches will be generated in the same way as if the programmable
|
|
completion code had generated them directly from a completion specification
|
|
with the same flags.
|
|
If <var class="var">word</var> is specified, only those completions matching <var class="var">word</var>
|
|
will be displayed or stored.
|
|
</p>
|
|
<p>The return value is true unless an invalid option is supplied, or no
|
|
matches were generated.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-complete"></a><span><code class="code">complete</code><a class="copiable-link" href="#index-complete"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted"><code class="code">complete [-abcdefgjksuv] [-o <var class="var">comp-option</var>] [-DEI] [-A <var class="var">action</var>]
|
|
[-G <var class="var">globpat</var>] [-W <var class="var">wordlist</var>] [-F <var class="var">function</var>] [-C <var class="var">command</var>]
|
|
[-X <var class="var">filterpat</var>] [-P <var class="var">prefix</var>] [-S <var class="var">suffix</var>] <var class="var">name</var> [<var class="var">name</var> ...]</code>
|
|
<code class="code">complete -pr [-DEI] [<var class="var">name</var> ...]</code>
|
|
</pre></div>
|
|
|
|
<p>Specify how arguments to each <var class="var">name</var> should be completed.
|
|
</p>
|
|
<p>If the <samp class="option">-p</samp> option is supplied, or if no options or <var class="var">name</var>s
|
|
are supplied, print existing completion specifications
|
|
in a way that allows them to be reused as input.
|
|
The <samp class="option">-r</samp> option removes a completion specification for
|
|
each <var class="var">name</var>, or, if no <var class="var">name</var>s are supplied, all
|
|
completion specifications.
|
|
</p>
|
|
<p>The <samp class="option">-D</samp> option indicates that other supplied options and actions should
|
|
apply to the “default” command completion; that is, completion attempted
|
|
on a command for which no completion has previously been defined.
|
|
The <samp class="option">-E</samp> option indicates that other supplied options and actions should
|
|
apply to “empty” command completion; that is, completion attempted on a
|
|
blank line.
|
|
The <samp class="option">-I</samp> option indicates that other supplied options and actions should
|
|
apply to completion on the initial non-assignment word on the line, or after a
|
|
command delimiter such as ‘<samp class="samp">;</samp>’ or ‘<samp class="samp">|</samp>’, which is usually command
|
|
name completion.
|
|
If multiple options are supplied, the <samp class="option">-D</samp> option takes precedence
|
|
over <samp class="option">-E</samp>, and both take precedence over <samp class="option">-I</samp>.
|
|
If any of <samp class="option">-D</samp>, <samp class="option">-E</samp>, or <samp class="option">-I</samp> are supplied, any other
|
|
<var class="var">name</var> arguments are ignored; these completions only apply to the case
|
|
specified by the option.
|
|
</p>
|
|
<p>The process of applying these completion specifications when word completion
|
|
is attempted is described above (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
</p>
|
|
<p>Other options, if specified, have the following meanings.
|
|
The arguments to the <samp class="option">-G</samp>, <samp class="option">-W</samp>, and <samp class="option">-X</samp> options
|
|
(and, if necessary, the <samp class="option">-P</samp> and <samp class="option">-S</samp> options)
|
|
should be quoted to protect them from expansion before the
|
|
<code class="code">complete</code> builtin is invoked.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-o <var class="var">comp-option</var></code></dt>
|
|
<dd><p>The <var class="var">comp-option</var> controls several aspects of the compspec’s behavior
|
|
beyond the simple generation of completions.
|
|
<var class="var">comp-option</var> may be one of:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">bashdefault</code></dt>
|
|
<dd><p>Perform the rest of the default Bash completions if the compspec
|
|
generates no matches.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">default</code></dt>
|
|
<dd><p>Use Readline’s default filename completion if the compspec generates
|
|
no matches.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">dirnames</code></dt>
|
|
<dd><p>Perform directory name completion if the compspec generates no matches.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">filenames</code></dt>
|
|
<dd><p>Tell Readline that the compspec generates filenames, so it can perform
|
|
any filename-specific processing (such as adding a slash to directory names,
|
|
quoting special characters, or suppressing trailing spaces).
|
|
This option is intended to be used with shell functions specified
|
|
with <samp class="option">-F</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">fullquote</code></dt>
|
|
<dd><p>Tell Readline to quote all the completed words even if they are not
|
|
filenames.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">noquote</code></dt>
|
|
<dd><p>Tell Readline not to quote the completed words if they are filenames
|
|
(quoting filenames is the default).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">nosort</code></dt>
|
|
<dd><p>Tell Readline not to sort the list of possible completions alphabetically.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">nospace</code></dt>
|
|
<dd><p>Tell Readline not to append a space (the default) to words completed at
|
|
the end of the line.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">plusdirs</code></dt>
|
|
<dd><p>After generating any matches defined by the compspec,
|
|
attempt directory name completion and add any
|
|
matches to the results of the other actions.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
</dd>
|
|
<dt><code class="code">-A <var class="var">action</var></code></dt>
|
|
<dd><p>The <var class="var">action</var> may be one of the following to generate a list of possible
|
|
completions:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">alias</code></dt>
|
|
<dd><p>Alias names.
|
|
May also be specified as <samp class="option">-a</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">arrayvar</code></dt>
|
|
<dd><p>Array variable names.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">binding</code></dt>
|
|
<dd><p>Readline key binding names (see <a class="pxref" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">builtin</code></dt>
|
|
<dd><p>Names of shell builtin commands.
|
|
May also be specified as <samp class="option">-b</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">command</code></dt>
|
|
<dd><p>Command names.
|
|
May also be specified as <samp class="option">-c</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">directory</code></dt>
|
|
<dd><p>Directory names.
|
|
May also be specified as <samp class="option">-d</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">disabled</code></dt>
|
|
<dd><p>Names of disabled shell builtins.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">enabled</code></dt>
|
|
<dd><p>Names of enabled shell builtins.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">export</code></dt>
|
|
<dd><p>Names of exported shell variables.
|
|
May also be specified as <samp class="option">-e</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">file</code></dt>
|
|
<dd><p>File and directory names, similar to Readline’s filename completion.
|
|
May also be specified as <samp class="option">-f</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">function</code></dt>
|
|
<dd><p>Names of shell functions.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">group</code></dt>
|
|
<dd><p>Group names.
|
|
May also be specified as <samp class="option">-g</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">helptopic</code></dt>
|
|
<dd><p>Help topics as accepted by the <code class="code">help</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">hostname</code></dt>
|
|
<dd><p>Hostnames, as taken from the file specified by the
|
|
<code class="env">HOSTFILE</code> shell variable (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">job</code></dt>
|
|
<dd><p>Job names, if job control is active.
|
|
May also be specified as <samp class="option">-j</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">keyword</code></dt>
|
|
<dd><p>Shell reserved words.
|
|
May also be specified as <samp class="option">-k</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">running</code></dt>
|
|
<dd><p>Names of running jobs, if job control is active.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">service</code></dt>
|
|
<dd><p>Service names.
|
|
May also be specified as <samp class="option">-s</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">setopt</code></dt>
|
|
<dd><p>Valid arguments for the <samp class="option">-o</samp> option to the <code class="code">set</code> builtin
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">shopt</code></dt>
|
|
<dd><p>Shell option names as accepted by the <code class="code">shopt</code> builtin
|
|
(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">signal</code></dt>
|
|
<dd><p>Signal names.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">stopped</code></dt>
|
|
<dd><p>Names of stopped jobs, if job control is active.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">user</code></dt>
|
|
<dd><p>User names.
|
|
May also be specified as <samp class="option">-u</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">variable</code></dt>
|
|
<dd><p>Names of all shell variables.
|
|
May also be specified as <samp class="option">-v</samp>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
</dd>
|
|
<dt><code class="code">-C <var class="var">command</var></code></dt>
|
|
<dd><p><var class="var">command</var> is executed in a subshell environment, and its output is
|
|
used as the possible completions.
|
|
Arguments are passed as with the <samp class="option">-F</samp> option.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-F <var class="var">function</var></code></dt>
|
|
<dd><p>The shell function <var class="var">function</var> is executed in the current shell
|
|
environment.
|
|
When it is executed,
|
|
the first argument ($1) is the name of the command whose arguments are
|
|
being completed,
|
|
the second argument ($2) is the word being completed, and
|
|
the third argument ($3) is the word preceding the word being completed,
|
|
as described above (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
When <code class="code">function</code> finishes,
|
|
programmable completion retrieves
|
|
the possible completions from the value
|
|
of the <code class="env">COMPREPLY</code> array variable.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-G <var class="var">globpat</var></code></dt>
|
|
<dd><p>Expand the filename expansion pattern <var class="var">globpat</var> to generate
|
|
the possible completions.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-P <var class="var">prefix</var></code></dt>
|
|
<dd><p>Add <var class="var">prefix</var> to the beginning of each possible completion
|
|
after all other options have been applied.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-S <var class="var">suffix</var></code></dt>
|
|
<dd><p>Append <var class="var">suffix</var> to each possible completion
|
|
after all other options have been applied.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-W <var class="var">wordlist</var></code></dt>
|
|
<dd><p>Split the <var class="var">wordlist</var> using the characters in the
|
|
<code class="env">IFS</code> special variable as delimiters, and expand
|
|
each resulting word.
|
|
Shell quoting is honored within <var class="var">wordlist</var>
|
|
in order to provide a
|
|
mechanism for the words to contain shell metacharacters or characters
|
|
in the value of <code class="env">IFS</code>.
|
|
The possible completions are the members of the resultant list which
|
|
match a prefix of the word being completed.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-X <var class="var">filterpat</var></code></dt>
|
|
<dd><p><var class="var">filterpat</var> is a pattern as used for filename expansion.
|
|
It is applied to the list of possible completions generated by the
|
|
preceding options and arguments, and each completion matching
|
|
<var class="var">filterpat</var> is removed from the list.
|
|
A leading ‘<samp class="samp">!</samp>’ in <var class="var">filterpat</var> negates the pattern; in this
|
|
case, any completion not matching <var class="var">filterpat</var> is removed.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The return value is true unless an invalid option is supplied, an option
|
|
other than
|
|
<samp class="option">-p</samp>,
|
|
<samp class="option">-r</samp>,
|
|
<samp class="option">-D</samp>,
|
|
<samp class="option">-E</samp>,
|
|
or
|
|
<samp class="option">-I</samp>
|
|
is supplied without a <var class="var">name</var>
|
|
argument, an attempt is made to remove a completion specification for
|
|
a <var class="var">name</var> for which no specification exists, or
|
|
an error occurs adding a completion specification.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-compopt"></a><span><code class="code">compopt</code><a class="copiable-link" href="#index-compopt"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted"><code class="code">compopt</code> [-o <var class="var">option</var>] [-DEI] [+o <var class="var">option</var>] [<var class="var">name</var>]
|
|
</pre></div>
|
|
<p>Modify completion options for each <var class="var">name</var> according to the
|
|
<var class="var">option</var>s, or for the currently-executing completion if no <var class="var">name</var>s
|
|
are supplied.
|
|
If no <var class="var">option</var>s are given, display the completion options for each
|
|
<var class="var">name</var> or the current completion.
|
|
The possible values of <var class="var">option</var> are those valid for the <code class="code">complete</code>
|
|
builtin described above.
|
|
</p>
|
|
<p>The <samp class="option">-D</samp> option indicates that other supplied options should
|
|
apply to the “default” command completion;
|
|
the <samp class="option">-E</samp> option indicates that other supplied options should
|
|
apply to “empty” command completion; and
|
|
the <samp class="option">-I</samp> option indicates that other supplied options should
|
|
apply to completion on the initial word on the line.
|
|
These are determined in the same way as the <code class="code">complete</code> builtin.
|
|
</p>
|
|
<p>If multiple options are supplied, the <samp class="option">-D</samp> option takes precedence
|
|
over <samp class="option">-E</samp>, and both take precedence over <samp class="option">-I</samp>
|
|
</p>
|
|
<p>The return value is true unless an invalid option is supplied, an attempt
|
|
is made to modify the options for a <var class="var">name</var> for which no completion
|
|
specification exists, or an output error occurs.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="A-Programmable-Completion-Example">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Programmable-Completion-Builtins" accesskey="p" rel="prev">Programmable Completion Builtins</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="A-Programmable-Completion-Example-1"><span>8.8 A Programmable Completion Example<a class="copiable-link" href="#A-Programmable-Completion-Example-1"> ¶</a></span></h3>
|
|
|
|
<p>The most common way to obtain additional completion functionality beyond
|
|
the default actions <code class="code">complete</code> and <code class="code">compgen</code> provide is to use
|
|
a shell function and bind it to a particular command using <code class="code">complete -F</code>.
|
|
</p>
|
|
<p>The following function provides completions for the <code class="code">cd</code> builtin.
|
|
It is a reasonably good example of what shell functions must do when
|
|
used for completion.
|
|
This function uses the word passed as <code class="code">$2</code> to determine the
|
|
directory name to complete.
|
|
You can also use the
|
|
<code class="code">COMP_WORDS</code> array variable; the current word is indexed by the
|
|
<code class="code">COMP_CWORD</code> variable.
|
|
</p>
|
|
<p>The function relies on the <code class="code">complete</code> and <code class="code">compgen</code> builtins
|
|
to do much of the work, adding only the things that the Bash <code class="code">cd</code>
|
|
does beyond accepting basic directory names:
|
|
tilde expansion (see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>),
|
|
searching directories in <var class="var">$CDPATH</var>, which is described above
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>),
|
|
and basic support for the <code class="code">cdable_vars</code> shell option
|
|
(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
<code class="code">_comp_cd</code> modifies the value of <var class="var">IFS</var> so that it contains only
|
|
a newline to accommodate file names containing spaces and tabs –
|
|
<code class="code">compgen</code> prints the possible completions it generates one per line.
|
|
</p>
|
|
<p>Possible completions go into the <var class="var">COMPREPLY</var> array variable, one
|
|
completion per array element.
|
|
The programmable completion system retrieves
|
|
the completions from there when the function returns.
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted"># A completion function for the cd builtin
|
|
# based on the cd completion function from the bash_completion package
|
|
_comp_cd()
|
|
{
|
|
local IFS=$' \t\n' # normalize IFS
|
|
local cur _skipdot _cdpath
|
|
local i j k
|
|
|
|
# Tilde expansion, which also expands tilde to full pathname
|
|
case "$2" in
|
|
\~*) eval cur="$2" ;;
|
|
*) cur=$2 ;;
|
|
esac
|
|
|
|
# no cdpath or absolute pathname -- straight directory completion
|
|
if [[ -z "${CDPATH:-}" ]] || [[ "$cur" == @(./*|../*|/*) ]]; then
|
|
# compgen prints paths one per line; could also use while loop
|
|
IFS=$'\n'
|
|
COMPREPLY=( $(compgen -d -- "$cur") )
|
|
IFS=$' \t\n'
|
|
# CDPATH+directories in the current directory if not in CDPATH
|
|
else
|
|
IFS=$'\n'
|
|
_skipdot=false
|
|
# preprocess CDPATH to convert null directory names to .
|
|
_cdpath=${CDPATH/#:/.:}
|
|
_cdpath=${_cdpath//::/:.:}
|
|
_cdpath=${_cdpath/%:/:.}
|
|
for i in ${_cdpath//:/$'\n'}; do
|
|
if [[ $i -ef . ]]; then _skipdot=true; fi
|
|
k="${#COMPREPLY[@]}"
|
|
for j in $( compgen -d -- "$i/$cur" ); do
|
|
COMPREPLY[k++]=${j#$i/} # cut off directory
|
|
done
|
|
done
|
|
$_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") )
|
|
IFS=$' \t\n'
|
|
fi
|
|
|
|
# variable names if appropriate shell option set and no completions
|
|
if shopt -q cdable_vars && [[ ${#COMPREPLY[@]} -eq 0 ]]; then
|
|
COMPREPLY=( $(compgen -v -- "$cur") )
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
</pre></div>
|
|
|
|
<p>We install the completion function using the <samp class="option">-F</samp> option to
|
|
<code class="code">complete</code>:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted"># Tell readline to quote appropriate and append slashes to directories;
|
|
# use the bash default completion for other arguments
|
|
complete -o filenames -o nospace -o bashdefault -F _comp_cd cd
|
|
</pre></div>
|
|
|
|
<p>Since we’d like Bash and Readline to take care of some
|
|
of the other details for us, we use several other options to tell Bash
|
|
and Readline what to do.
|
|
The <samp class="option">-o filenames</samp> option tells Readline
|
|
that the possible completions should be treated as filenames, and quoted
|
|
appropriately.
|
|
That option will also cause Readline to append a slash to
|
|
filenames it can determine are directories (which is why we might want to
|
|
extend <code class="code">_comp_cd</code> to append a slash if we’re using directories found
|
|
via <var class="var">CDPATH</var>: Readline can’t tell those completions are directories).
|
|
The <samp class="option">-o nospace</samp> option tells Readline to not append a space
|
|
character to the directory name, in case we want to append to it.
|
|
The <samp class="option">-o bashdefault</samp> option brings in the rest of the “Bash default”
|
|
completions – possible completions that Bash adds to the default Readline
|
|
set.
|
|
These include things like command name completion, variable completion
|
|
for words beginning with ‘<samp class="samp">$</samp>’ or ‘<samp class="samp">${</samp>’, completions containing
|
|
pathname expansion patterns (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>), and so on.
|
|
</p>
|
|
<p>Once installed using <code class="code">complete</code>, <code class="code">_comp_cd</code> will be called every
|
|
time we attempt word completion for a <code class="code">cd</code> command.
|
|
</p>
|
|
<p>Many more examples – an extensive collection of completions for most of
|
|
the common GNU, Unix, and Linux commands – are available as part of the
|
|
bash_completion project. This is installed by default on many GNU/Linux
|
|
distributions. Originally written by Ian Macdonald, the project now lives
|
|
at <a class="url" href="https://github.com/scop/bash-completion/">https://github.com/scop/bash-completion/</a>.
|
|
There are ports for other systems such as Solaris and Mac OS X.
|
|
</p>
|
|
<p>An older version of the bash_completion package is distributed with bash
|
|
in the <samp class="file">examples/complete</samp> subdirectory.
|
|
</p>
|
|
<a class="index-entry-id" id="index-History_002c-how-to-use"></a>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Using-History-Interactively">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Installing-Bash" accesskey="n" rel="next">Installing Bash</a>, Previous: <a href="#Command-Line-Editing" accesskey="p" rel="prev">Command Line Editing</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Using-History-Interactively-1"><span>9 Using History Interactively<a class="copiable-link" href="#Using-History-Interactively-1"> ¶</a></span></h2>
|
|
|
|
|
|
<p>This chapter describes how to use the <small class="sc">GNU</small> History Library
|
|
interactively, from a user’s standpoint.
|
|
It should be considered a user’s guide.
|
|
For information on using the <small class="sc">GNU</small> History Library in other programs,
|
|
see the <small class="sc">GNU</small> Readline Library Manual.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Bash-History-Facilities" accesskey="1">Bash History Facilities</a></li>
|
|
<li><a href="#Bash-History-Builtins" accesskey="2">Bash History Builtins</a></li>
|
|
<li><a href="#History-Interaction" accesskey="3">History Expansion</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Bash-History-Facilities">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Bash-History-Builtins" accesskey="n" rel="next">Bash History Builtins</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bash-History-Facilities-1"><span>9.1 Bash History Facilities<a class="copiable-link" href="#Bash-History-Facilities-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-command-history"></a>
|
|
<a class="index-entry-id" id="index-history-list"></a>
|
|
|
|
<p>When the <samp class="option">-o history</samp> option to the <code class="code">set</code> builtin
|
|
is enabled (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>),
|
|
the shell provides access to the <em class="dfn">command history</em>,
|
|
the list of commands previously typed.
|
|
The value of the <code class="env">HISTSIZE</code> shell variable is used as the
|
|
number of commands to save in a history list:
|
|
the shell saves the text of the last <code class="env">$HISTSIZE</code>
|
|
commands (default 500).
|
|
The shell stores each command in the history list prior to
|
|
parameter and variable expansion
|
|
but after history expansion is performed, subject to the
|
|
values of the shell variables
|
|
<code class="env">HISTIGNORE</code> and <code class="env">HISTCONTROL</code>.
|
|
</p>
|
|
<p>When the shell starts up, Bash initializes the history list
|
|
by reading history entries from the
|
|
file named by the <code class="env">HISTFILE</code> variable (default <samp class="file">~/.bash_history</samp>).
|
|
This is referred to as the <em class="dfn">history file</em>.
|
|
The history file is truncated, if necessary,
|
|
to contain no more than the number of history entries
|
|
specified by the value of the <code class="env">HISTFILESIZE</code> variable.
|
|
If <code class="env">HISTFILESIZE</code> is unset, or set to null, a non-numeric value,
|
|
or a numeric value less than zero, the history file is not truncated.
|
|
</p>
|
|
<p>When the history file is read,
|
|
lines beginning with the history comment character followed immediately
|
|
by a digit are interpreted as timestamps for the following history entry.
|
|
These timestamps are optionally displayed depending on the value of the
|
|
<code class="env">HISTTIMEFORMAT</code> variable (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
When present, history timestamps delimit history entries, making
|
|
multi-line entries possible.
|
|
</p>
|
|
<p>When a shell with history enabled exits, Bash copies the last
|
|
<code class="env">$HISTSIZE</code> entries from the history list to the file
|
|
named by <code class="env">$HISTFILE</code>.
|
|
If the <code class="code">histappend</code> shell option is set (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>),
|
|
Bash appends the entries to the history file,
|
|
otherwise it overwrites the history file.
|
|
If <code class="env">HISTFILE</code> is unset or null,
|
|
or if the history file is unwritable, the history is not saved.
|
|
After saving the history, Bash truncates the history file
|
|
to contain no more than <code class="env">$HISTFILESIZE</code>
|
|
lines as described above.
|
|
</p>
|
|
<p>If the <code class="env">HISTTIMEFORMAT</code>
|
|
variable is set, the shell writes the timestamp information
|
|
associated with each history entry to the history file,
|
|
marked with the history comment character,
|
|
so timestamps are preserved across shell sessions.
|
|
When the history file is read, lines beginning with
|
|
the history comment character followed immediately by a digit are
|
|
interpreted as timestamps for the following history entry.
|
|
As above, when using <code class="env">HISTTIMEFORMAT</code>,
|
|
the timestamps delimit multi-line history entries.
|
|
</p>
|
|
<p>The <code class="code">fc</code> builtin command will list or edit and re-execute a
|
|
portion of the history list.
|
|
The <code class="code">history</code> builtin can display or
|
|
modify the history list and manipulate the history file.
|
|
When using command-line editing, search commands
|
|
are available in each editing mode that provide access to the
|
|
history list (see <a class="pxref" href="#Commands-For-History">Commands For Manipulating The History</a>).
|
|
</p>
|
|
<p>The shell allows control over which commands are saved on the history list.
|
|
The <code class="env">HISTCONTROL</code> and <code class="env">HISTIGNORE</code>
|
|
variables are used to save only a subset of the commands entered.
|
|
If the <code class="code">cmdhist</code> shell option is
|
|
enabled, the shell attempts to save each
|
|
line of a multi-line command in the same history entry, adding
|
|
semicolons where necessary to preserve syntactic correctness.
|
|
The <code class="code">lithist</code>
|
|
shell option modifies <code class="code">cmdhist</code> by saving
|
|
the command with embedded newlines instead of semicolons.
|
|
The <code class="code">shopt</code> builtin is used to set these options.
|
|
See <a class="xref" href="#The-Shopt-Builtin">The Shopt Builtin</a>, for a description of <code class="code">shopt</code>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Bash-History-Builtins">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#History-Interaction" accesskey="n" rel="next">History Expansion</a>, Previous: <a href="#Bash-History-Facilities" accesskey="p" rel="prev">Bash History Facilities</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Bash-History-Builtins-1"><span>9.2 Bash History Builtins<a class="copiable-link" href="#Bash-History-Builtins-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-history-builtins"></a>
|
|
|
|
<p>Bash provides two builtin commands which manipulate the
|
|
history list and history file.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><a id="index-fc"></a><span><code class="code">fc</code><a class="copiable-link" href="#index-fc"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted"><code class="code">fc [-e <var class="var">ename</var>] [-lnr] [<var class="var">first</var>] [<var class="var">last</var>]</code>
|
|
<code class="code">fc -s [<var class="var">pat</var>=<var class="var">rep</var>] [<var class="var">command</var>]</code>
|
|
</pre></div>
|
|
|
|
<p>The first form selects a range of commands from
|
|
<var class="var">first</var> to <var class="var">last</var>
|
|
from the history list and displays or edits and re-executes them.
|
|
Both <var class="var">first</var> and
|
|
<var class="var">last</var> may be specified as a string (to locate the most recent
|
|
command beginning with that string) or as a number (an index into the
|
|
history list, where a negative number is used as an offset from the
|
|
current command number).
|
|
</p>
|
|
<p>When listing, a <var class="var">first</var> or <var class="var">last</var> of 0 is equivalent to -1
|
|
and -0 is equivalent to the current command (usually the <code class="code">fc</code>
|
|
command);
|
|
otherwise 0 is equivalent to -1 and -0 is invalid.
|
|
</p>
|
|
<p>If <var class="var">last</var> is not specified, it is set to
|
|
the current command for listing and to <var class="var">first</var> otherwise.
|
|
If <var class="var">first</var> is not specified, it is set to the previous
|
|
command for editing and −16 for listing.
|
|
</p>
|
|
<p>If the <samp class="option">-l</samp> flag is supplied,
|
|
the commands are listed on standard output.
|
|
The <samp class="option">-n</samp> flag suppresses the command numbers when listing.
|
|
The <samp class="option">-r</samp> flag reverses the order of the listing.
|
|
</p>
|
|
<p>Otherwise, <code class="code">fc</code> invokes the editor named by
|
|
<var class="var">ename</var> on a file containing those commands.
|
|
If <var class="var">ename</var> is not supplied, <code class="code">fc</code> uses the value of the following
|
|
variable expansion: <code class="code">${FCEDIT:-${EDITOR:-vi}}</code>.
|
|
This says to use the
|
|
value of the <code class="env">FCEDIT</code> variable if set, or the value of the
|
|
<code class="env">EDITOR</code> variable if that is set, or <code class="code">vi</code> if neither is set.
|
|
When editing is complete, <code class="code">fc</code> reads the file of edited commands
|
|
and echoes and executes them.
|
|
</p>
|
|
<p>In the second form, <code class="code">fc</code> re-executes <var class="var">command</var> after
|
|
replacing each instance of <var class="var">pat</var> in the selected command with <var class="var">rep</var>.
|
|
<var class="var">command</var> is interpreted the same as <var class="var">first</var> above.
|
|
</p>
|
|
<p>A useful alias to use with the <code class="code">fc</code> command is <code class="code">r='fc -s'</code>, so
|
|
that typing ‘<samp class="samp">r cc</samp>’ runs the last command beginning with <code class="code">cc</code>
|
|
and typing ‘<samp class="samp">r</samp>’ re-executes the last command (see <a class="pxref" href="#Aliases">Aliases</a>).
|
|
</p>
|
|
<p>If the first form is used, the return value is zero unless an invalid
|
|
option is encountered or <var class="var">first</var> or <var class="var">last</var>
|
|
specify history lines out of range.
|
|
When editing and re-executing a file of commands,
|
|
the return value is the value of the last command executed
|
|
or failure if an error occurs with the temporary file.
|
|
If the second form is used, the return status
|
|
is that of the re-executed command, unless
|
|
<var class="var">command</var> does not specify a valid history entry, in which case
|
|
<code class="code">fc</code> returns a non-zero status.
|
|
</p>
|
|
</dd>
|
|
<dt><a id="index-history"></a><span><code class="code">history</code><a class="copiable-link" href="#index-history"> ¶</a></span></dt>
|
|
<dd><div class="example">
|
|
<pre class="example-preformatted">history [<var class="var">n</var>]
|
|
history -c
|
|
history -d <var class="var">offset</var>
|
|
history -d <var class="var">start</var>-<var class="var">end</var>
|
|
history [-anrw] [<var class="var">filename</var>]
|
|
history -ps <var class="var">arg</var>
|
|
</pre></div>
|
|
|
|
<p>With no options, display the history list with numbers.
|
|
Entries prefixed with a ‘<samp class="samp">*</samp>’ have been modified.
|
|
An argument of <var class="var">n</var> lists only the last <var class="var">n</var> entries.
|
|
If the shell variable <code class="env">HISTTIMEFORMAT</code> is set and not null,
|
|
it is used as a format string for <code class="code">strftime</code>(3) to display
|
|
the time stamp associated with each displayed history entry.
|
|
If <code class="code">history</code> uses <code class="env">HISTTIMEFORMAT</code>, it does not print an
|
|
intervening space between the formatted time stamp and the history entry.
|
|
</p>
|
|
<p>Options, if supplied, have the following meanings:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">-c</code></dt>
|
|
<dd><p>Clear the history list.
|
|
This may be combined with the other options to replace the history list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-d <var class="var">offset</var></code></dt>
|
|
<dd><p>Delete the history entry at position <var class="var">offset</var>.
|
|
If <var class="var">offset</var> is positive, it should be specified as it appears when
|
|
the history is displayed.
|
|
If <var class="var">offset</var> is negative, it is interpreted as relative to one greater
|
|
than the last history position, so negative indices count back from the
|
|
end of the history, and an index of ‘<samp class="samp">-1</samp>’ refers to the current
|
|
<code class="code">history -d</code> command.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-d <var class="var">start</var>-<var class="var">end</var></code></dt>
|
|
<dd><p>Delete the range of history entries between positions <var class="var">start</var> and
|
|
<var class="var">end</var>, inclusive.
|
|
Positive and negative values for <var class="var">start</var> and <var class="var">end</var>
|
|
are interpreted as described above.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-a</code></dt>
|
|
<dd><p>Append the "new" history lines to the history file.
|
|
These are history lines entered since the beginning of the current
|
|
Bash session, but not already appended to the history file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-n</code></dt>
|
|
<dd><p>Read the history lines not already read from the history file
|
|
and add them to the current history list.
|
|
These are lines appended to the history
|
|
file since the beginning of the current Bash session.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-r</code></dt>
|
|
<dd><p>Read the history file and append its contents to the history list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-w</code></dt>
|
|
<dd><p>Write the current history list to the history file, overwriting
|
|
the history file.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-p</code></dt>
|
|
<dd><p>Perform history substitution on the <var class="var">arg</var>s and display the result
|
|
on the standard output, without storing the results in the history list.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">-s</code></dt>
|
|
<dd><p>Add the <var class="var">arg</var>s to the end of the history list as a single entry.
|
|
The last command in the history list is removed before adding the <var class="var">arg</var>s.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If a <var class="var">filename</var> argument is supplied
|
|
with any of the <samp class="option">-w</samp>, <samp class="option">-r</samp>, <samp class="option">-a</samp>, or <samp class="option">-n</samp>
|
|
options, Bash uses <var class="var">filename</var> as the history file.
|
|
If not, it uses the value of the <code class="env">HISTFILE</code> variable.
|
|
If <code class="env">HISTFILE</code> is unset or null, these options have no effect.
|
|
</p>
|
|
<p>If the <code class="env">HISTTIMEFORMAT</code>
|
|
variable is set, <code class="code">history</code> writes the time stamp information
|
|
associated with each history entry to the history file,
|
|
marked with the history comment character as described above.
|
|
When the history file is read, lines beginning with the history
|
|
comment character followed immediately by a digit are interpreted
|
|
as timestamps for the following history entry.
|
|
</p>
|
|
<p>The return value is 0 unless an invalid option is encountered, an
|
|
error occurs while reading or writing the history file, an invalid
|
|
<var class="var">offset</var> or range is supplied as an argument to <samp class="option">-d</samp>, or the
|
|
history expansion supplied as an argument to <samp class="option">-p</samp> fails.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="History-Interaction">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Bash-History-Builtins" accesskey="p" rel="prev">Bash History Builtins</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="History-Expansion"><span>9.3 History Expansion<a class="copiable-link" href="#History-Expansion"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-history-expansion"></a>
|
|
|
|
<p>The shell
|
|
provides a history expansion feature that is similar
|
|
to the history expansion provided by <code class="code">csh</code>
|
|
(also referred to as history substitution where appropriate).
|
|
This section describes the syntax used to manipulate the
|
|
history information.
|
|
</p>
|
|
<p>History expansion is enabled by default for interactive shells,
|
|
and can be disabled using the <samp class="option">+H</samp> option to the <code class="code">set</code>
|
|
builtin command (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
Non-interactive shells do not perform history expansion by default,
|
|
but it can be enabled with <code class="code">set -H</code>.
|
|
</p>
|
|
<p>History expansions introduce words from the history list into
|
|
the input stream, making it easy to repeat commands, insert the
|
|
arguments to a previous command into the current input line, or
|
|
fix errors in previous commands quickly.
|
|
</p>
|
|
<p>History expansion is performed immediately after a complete line
|
|
is read, before the shell breaks it into words, and is performed
|
|
on each line individually.
|
|
Bash attempts to inform the history
|
|
expansion functions about quoting still in effect from previous lines.
|
|
</p>
|
|
<p>History expansion takes place in two parts.
|
|
The first is to determine
|
|
which entry from the history list should be used during substitution.
|
|
The second is to select portions of that entry to include into the
|
|
current one.
|
|
</p>
|
|
<p>The entry selected from the history is called the <em class="dfn">event</em>,
|
|
and the portions of that entry that are acted upon are <em class="dfn">words</em>.
|
|
Various <em class="dfn">modifiers</em> are available to manipulate the selected words.
|
|
The entry is split into words in the same fashion that Bash
|
|
does when reading input,
|
|
so that several words surrounded by quotes are considered one word.
|
|
The <em class="dfn">event designator</em> selects the event, the optional
|
|
<em class="dfn">word designator</em> selects words from the event, and
|
|
various optional <em class="dfn">modifiers</em> are available to manipulate the
|
|
selected words.
|
|
</p>
|
|
<p>History expansions are introduced by the appearance of the
|
|
history expansion character, which is ‘<samp class="samp">!</samp>’ by default.
|
|
History expansions may appear anywhere in the input, but do not nest.
|
|
</p>
|
|
<p>History expansion implements shell-like quoting conventions:
|
|
a backslash can be used to remove the special handling for the next character;
|
|
single quotes enclose verbatim sequences of characters, and can be used to
|
|
inhibit history expansion;
|
|
and characters enclosed within double quotes may be subject to history
|
|
expansion, since backslash can escape the history expansion character,
|
|
but single quotes may not, since they are not treated specially within
|
|
double quotes.
|
|
</p>
|
|
<p>When using the shell, only ‘<samp class="samp">\</samp>’ and ‘<samp class="samp">'</samp>’ may be used to escape the
|
|
history expansion character, but the history expansion character is
|
|
also treated as quoted if it immediately precedes the closing double quote
|
|
in a double-quoted string.
|
|
</p>
|
|
<p>Several characters inhibit history expansion if found immediately
|
|
following the history expansion character, even if it is unquoted:
|
|
space, tab, newline, carriage return, ‘<samp class="samp">=</samp>’,
|
|
and the other shell metacharacters.
|
|
</p>
|
|
<p>There is a special abbreviation for substitution, active when the
|
|
<var class="var">quick substitution</var> character
|
|
(described above under <code class="code">histchars</code>)
|
|
is the first character on the line.
|
|
It selects the previous history list entry, using an event designator
|
|
equivalent to <code class="code">!!</code>,
|
|
and substitutes one string for another in that entry.
|
|
It is described below (see <a class="pxref" href="#Event-Designators">Event Designators</a>).
|
|
This is the only history expansion that does not begin with the history
|
|
expansion character.
|
|
</p>
|
|
<p>Several shell options settable with the <code class="code">shopt</code>
|
|
builtin (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
modify history expansion behavior
|
|
If the <code class="code">histverify</code> shell option is enabled, and Readline
|
|
is being used, history substitutions are not immediately passed to
|
|
the shell parser.
|
|
Instead, the expanded line is reloaded into the Readline
|
|
editing buffer for further modification.
|
|
If Readline is being used, and the <code class="code">histreedit</code>
|
|
shell option is enabled, a failed history expansion is
|
|
reloaded into the Readline editing buffer for correction.
|
|
</p>
|
|
<p>The <samp class="option">-p</samp> option to the <code class="code">history</code> builtin command
|
|
shows what a history expansion will do before using it.
|
|
The <samp class="option">-s</samp> option to the <code class="code">history</code> builtin may be used to
|
|
add commands to the end of the history list without actually executing
|
|
them, so that they are available for subsequent recall.
|
|
This is most useful in conjunction with Readline.
|
|
</p>
|
|
<p>The shell allows control of the various characters used by the
|
|
history expansion mechanism with the <code class="code">histchars</code> variable,
|
|
as explained above (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>).
|
|
The shell uses the history comment character to mark history
|
|
timestamps when writing the history file.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Event-Designators" accesskey="1">Event Designators</a></li>
|
|
<li><a href="#Word-Designators" accesskey="2">Word Designators</a></li>
|
|
<li><a href="#Modifiers" accesskey="3">Modifiers</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="subsection-level-extent" id="Event-Designators">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Word-Designators" accesskey="n" rel="next">Word Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Expansion</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Event-Designators-1"><span>9.3.1 Event Designators<a class="copiable-link" href="#Event-Designators-1"> ¶</a></span></h4>
|
|
<a class="index-entry-id" id="index-event-designators"></a>
|
|
|
|
<p>An event designator is a reference to an entry in the history list.
|
|
The event designator consists of the portion of the word beginning
|
|
with the history expansion character, and ending with the word designator
|
|
if one is present, or the end of the word.
|
|
Unless the reference is absolute, events are relative to the current
|
|
position in the history list.
|
|
<a class="index-entry-id" id="index-history-events"></a>
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">!</code></dt>
|
|
<dd><p>Start a history substitution, except when followed by a space, tab,
|
|
the end of the line, ‘<samp class="samp">=</samp>’,
|
|
or the rest of the shell metacharacters defined above
|
|
(see <a class="pxref" href="#Definitions">Definitions</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!<var class="var">n</var></code></dt>
|
|
<dd><p>Refer to history list entry <var class="var">n</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!-<var class="var">n</var></code></dt>
|
|
<dd><p>Refer to the history entry minus <var class="var">n</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!!</code></dt>
|
|
<dd><p>Refer to the previous entry.
|
|
This is a synonym for ‘<samp class="samp">!-1</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!<var class="var">string</var></code></dt>
|
|
<dd><p>Refer to the most recent command
|
|
preceding the current position in the history list
|
|
starting with <var class="var">string</var>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!?<var class="var">string</var>[?]</code></dt>
|
|
<dd><p>Refer to the most recent command
|
|
preceding the current position in the history list
|
|
containing <var class="var">string</var>.
|
|
The trailing
|
|
‘<samp class="samp">?</samp>’ may be omitted if the <var class="var">string</var> is followed immediately by
|
|
a newline.
|
|
If <var class="var">string</var> is missing, this uses
|
|
the string from the most recent search;
|
|
it is an error if there is no previous search string.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">^<var class="var">string1</var>^<var class="var">string2</var>^</code></dt>
|
|
<dd><p>Quick Substitution.
|
|
Repeat the last command, replacing <var class="var">string1</var> with <var class="var">string2</var>.
|
|
Equivalent to <code class="code">!!:s^<var class="var">string1</var>^<var class="var">string2</var>^</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!#</code></dt>
|
|
<dd><p>The entire command line typed so far.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Word-Designators">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Modifiers" accesskey="n" rel="next">Modifiers</a>, Previous: <a href="#Event-Designators" accesskey="p" rel="prev">Event Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Expansion</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Word-Designators-1"><span>9.3.2 Word Designators<a class="copiable-link" href="#Word-Designators-1"> ¶</a></span></h4>
|
|
|
|
<p>Word designators are used to select desired words from the event.
|
|
They are optional; if the word designator isn’t supplied, the history
|
|
expansion uses the entire event.
|
|
A ‘<samp class="samp">:</samp>’ separates the event specification from the word designator.
|
|
It may be omitted if the word designator begins with a ‘<samp class="samp">^</samp>’, ‘<samp class="samp">$</samp>’,
|
|
‘<samp class="samp">*</samp>’, ‘<samp class="samp">-</samp>’, or ‘<samp class="samp">%</samp>’.
|
|
Words are numbered from the beginning of the line,
|
|
with the first word being denoted by 0 (zero).
|
|
That first word is usually the command word, and the arguments begin
|
|
with the second word.
|
|
Words are inserted into the current line separated by single spaces.
|
|
</p>
|
|
<p>For example,
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">!!</code></dt>
|
|
<dd><p>designates the preceding command.
|
|
When you type this, the preceding command is repeated in toto.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!!:$</code></dt>
|
|
<dd><p>designates the last word of the preceding command.
|
|
This may be shortened to <code class="code">!$</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">!fi:2</code></dt>
|
|
<dd><p>designates the second argument of the most recent command starting with
|
|
the letters <code class="code">fi</code>.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>Here are the word designators:
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">0 (zero)</code></dt>
|
|
<dd><p>The <code class="code">0</code>th word.
|
|
For the shell, and many other, applications, this is the command word.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">n</var></code></dt>
|
|
<dd><p>The <var class="var">n</var>th word.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">^</code></dt>
|
|
<dd><p>The first argument: word 1.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">$</code></dt>
|
|
<dd><p>The last word.
|
|
This is usually the last argument, but expands to the
|
|
zeroth word if there is only one word in the line.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">%</code></dt>
|
|
<dd><p>The first word matched by the most recent ‘<samp class="samp">?<var class="var">string</var>?</samp>’ search,
|
|
if the search string begins with a character that is part of a word.
|
|
By default, searches begin at the end of each line and proceed to the
|
|
beginning, so the first word matched is the one closest to the end of
|
|
the line.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">x</var>-<var class="var">y</var></code></dt>
|
|
<dd><p>A range of words; ‘<samp class="samp">-<var class="var">y</var></samp>’ abbreviates ‘<samp class="samp">0-<var class="var">y</var></samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">*</code></dt>
|
|
<dd><p>All of the words, except the <code class="code">0</code>th.
|
|
This is a synonym for ‘<samp class="samp">1-$</samp>’.
|
|
It is not an error to use ‘<samp class="samp">*</samp>’ if there is just one word in the event;
|
|
it expands to the empty string in that case.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">x</var>*</code></dt>
|
|
<dd><p>Abbreviates ‘<samp class="samp"><var class="var">x</var>-$</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code"><var class="var">x</var>-</code></dt>
|
|
<dd><p>Abbreviates ‘<samp class="samp"><var class="var">x</var>-$</samp>’ like ‘<samp class="samp"><var class="var">x</var>*</samp>’, but omits the last word.
|
|
If ‘<samp class="samp">x</samp>’ is missing, it defaults to 0.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If a word designator is supplied without an event specification, the
|
|
previous command is used as the event, equivalent to <code class="code">!!</code>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="subsection-level-extent" id="Modifiers">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Word-Designators" accesskey="p" rel="prev">Word Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Expansion</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h4 class="subsection" id="Modifiers-1"><span>9.3.3 Modifiers<a class="copiable-link" href="#Modifiers-1"> ¶</a></span></h4>
|
|
|
|
<p>After the optional word designator, you can add a sequence of one or more
|
|
of the following modifiers, each preceded by a ‘<samp class="samp">:</samp>’.
|
|
These modify, or edit, the word or words selected from the history event.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">h</code></dt>
|
|
<dd><p>Remove a trailing filename component, leaving only the head.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">t</code></dt>
|
|
<dd><p>Remove all leading filename components, leaving the tail.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">r</code></dt>
|
|
<dd><p>Remove a trailing suffix of the form ‘<samp class="samp">.<var class="var">suffix</var></samp>’, leaving
|
|
the basename.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">e</code></dt>
|
|
<dd><p>Remove all but the trailing suffix.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">p</code></dt>
|
|
<dd><p>Print the new command but do not execute it.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">q</code></dt>
|
|
<dd><p>Quote the substituted words, escaping further substitutions.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">x</code></dt>
|
|
<dd><p>Quote the substituted words as with ‘<samp class="samp">q</samp>’,
|
|
but break into words at spaces, tabs, and newlines.
|
|
The ‘<samp class="samp">q</samp>’ and ‘<samp class="samp">x</samp>’ modifiers are mutually exclusive;
|
|
expansion uses the last one supplied.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">s/<var class="var">old</var>/<var class="var">new</var>/</code></dt>
|
|
<dd><p>Substitute <var class="var">new</var> for the first occurrence of <var class="var">old</var> in the
|
|
event line.
|
|
Any character may be used as the delimiter in place of ‘<samp class="samp">/</samp>’.
|
|
The delimiter may be quoted in <var class="var">old</var> and <var class="var">new</var>
|
|
with a single backslash.
|
|
If ‘<samp class="samp">&</samp>’ appears in <var class="var">new</var>, it is replaced with <var class="var">old</var>.
|
|
A single backslash quotes the ‘<samp class="samp">&</samp>’ in <var class="var">old</var> and <var class="var">new</var>.
|
|
If <var class="var">old</var> is null, it is set to the last <var class="var">old</var>
|
|
substituted, or, if no previous history substitutions took place,
|
|
the last <var class="var">string</var>
|
|
in a !?<var class="var">string</var><code class="code">[?]</code>
|
|
search.
|
|
If <var class="var">new</var> is null, each matching <var class="var">old</var> is deleted.
|
|
The final delimiter is optional if it is the last
|
|
character on the input line.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">&</code></dt>
|
|
<dd><p>Repeat the previous substitution.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">g</code></dt>
|
|
<dt><code class="code">a</code></dt>
|
|
<dd><p>Cause changes to be applied over the entire event line.
|
|
This is used in conjunction with
|
|
‘<samp class="samp">s</samp>’, as in <code class="code">gs/<var class="var">old</var>/<var class="var">new</var>/</code>,
|
|
or with ‘<samp class="samp">&</samp>’.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">G</code></dt>
|
|
<dd><p>Apply the following ‘<samp class="samp">s</samp>’ or ‘<samp class="samp">&</samp>’ modifier once to each word
|
|
in the event.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="chapter-level-extent" id="Installing-Bash">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Reporting-Bugs" accesskey="n" rel="next">Reporting Bugs</a>, Previous: <a href="#Using-History-Interactively" accesskey="p" rel="prev">Using History Interactively</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="chapter" id="Installing-Bash-1"><span>10 Installing Bash<a class="copiable-link" href="#Installing-Bash-1"> ¶</a></span></h2>
|
|
|
|
<p>This chapter provides basic instructions for installing Bash on
|
|
the various supported platforms.
|
|
The distribution supports the
|
|
<small class="sc">GNU</small> operating systems, nearly every version of Unix, and several
|
|
non-Unix systems such as BeOS and Interix.
|
|
Other independent ports exist for Windows platforms.
|
|
</p>
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Basic-Installation" accesskey="1">Basic Installation</a></li>
|
|
<li><a href="#Compilers-and-Options" accesskey="2">Compilers and Options</a></li>
|
|
<li><a href="#Compiling-For-Multiple-Architectures" accesskey="3">Compiling For Multiple Architectures</a></li>
|
|
<li><a href="#Installation-Names" accesskey="4">Installation Names</a></li>
|
|
<li><a href="#Specifying-the-System-Type" accesskey="5">Specifying the System Type</a></li>
|
|
<li><a href="#Sharing-Defaults" accesskey="6">Sharing Defaults</a></li>
|
|
<li><a href="#Operation-Controls" accesskey="7">Operation Controls</a></li>
|
|
<li><a href="#Optional-Features" accesskey="8">Optional Features</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="section-level-extent" id="Basic-Installation">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Compilers-and-Options" accesskey="n" rel="next">Compilers and Options</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Basic-Installation-1"><span>10.1 Basic Installation<a class="copiable-link" href="#Basic-Installation-1"> ¶</a></span></h3>
|
|
<a class="index-entry-id" id="index-installation"></a>
|
|
<a class="index-entry-id" id="index-configuration"></a>
|
|
<a class="index-entry-id" id="index-Bash-installation"></a>
|
|
<a class="index-entry-id" id="index-Bash-configuration"></a>
|
|
|
|
<p>These are installation instructions for Bash.
|
|
</p>
|
|
<p>The simplest way to compile Bash is:
|
|
</p>
|
|
<ol class="enumerate">
|
|
<li> <code class="code">cd</code> to the directory containing the source code and type
|
|
‘<samp class="samp">./configure</samp>’ to configure Bash for your system.
|
|
If you’re using <code class="code">csh</code> on an old version of System V, you might
|
|
need to type ‘<samp class="samp">sh ./configure</samp>’ instead to prevent <code class="code">csh</code>
|
|
from trying to execute <code class="code">configure</code> itself.
|
|
|
|
<p>Running <code class="code">configure</code> takes some time.
|
|
While running, it prints messages telling which features it is
|
|
checking for.
|
|
</p>
|
|
</li><li> Type ‘<samp class="samp">make</samp>’ to compile Bash and build the <code class="code">bashbug</code> bug
|
|
reporting script.
|
|
|
|
</li><li> Optionally, type ‘<samp class="samp">make tests</samp>’ to run the Bash test suite.
|
|
|
|
</li><li> Type ‘<samp class="samp">make install</samp>’ to install <code class="code">bash</code> and <code class="code">bashbug</code>.
|
|
This will also install the manual pages and Info file, message translation
|
|
files, some supplemental documentation, a number of example loadable
|
|
builtin commands, and a set of header files for developing loadable
|
|
builtins.
|
|
You may need additional privileges to install <code class="code">bash</code> to your
|
|
desired destination, which may require ‘<samp class="samp">sudo make install</samp>’.
|
|
More information about controlling the locations where <code class="code">bash</code> and
|
|
other files are installed is below (see <a class="pxref" href="#Installation-Names">Installation Names</a>).
|
|
|
|
</li></ol>
|
|
|
|
<p>The <code class="code">configure</code> shell script attempts to guess correct
|
|
values for various system-dependent variables used during compilation.
|
|
It uses those values to create a <samp class="file">Makefile</samp> in
|
|
each directory of the package (the top directory, the
|
|
<samp class="file">builtins</samp>, <samp class="file">doc</samp>, <samp class="file">po</samp>, and <samp class="file">support</samp> directories,
|
|
each directory under <samp class="file">lib</samp>, and several others).
|
|
It also creates a
|
|
<samp class="file">config.h</samp> file containing system-dependent definitions.
|
|
Finally, it creates a shell script named <code class="code">config.status</code> that you
|
|
can run in the future to recreate the current configuration, a
|
|
file <samp class="file">config.cache</samp> that saves the results of its tests to
|
|
speed up reconfiguring, and a file <samp class="file">config.log</samp> containing
|
|
compiler output (useful mainly for debugging <code class="code">configure</code>).
|
|
If at some point
|
|
<samp class="file">config.cache</samp> contains results you don’t want to keep, you
|
|
may remove or edit it.
|
|
</p>
|
|
<p>To find out more about the options and arguments that the
|
|
<code class="code">configure</code> script understands, type
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">bash-4.2$ ./configure --help
|
|
</pre></div>
|
|
|
|
<p>at the Bash prompt in your Bash source directory.
|
|
</p>
|
|
<p>If you want to build Bash in a directory separate from the source
|
|
directory – to build for multiple architectures, for example –
|
|
just use the full path to the configure script.
|
|
The following commands
|
|
will build Bash in a directory under <samp class="file">/usr/local/build</samp> from
|
|
the source code in <samp class="file">/usr/local/src/bash-4.4</samp>:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">mkdir /usr/local/build/bash-4.4
|
|
cd /usr/local/build/bash-4.4
|
|
bash /usr/local/src/bash-4.4/configure
|
|
make
|
|
</pre></div>
|
|
|
|
<p>See <a class="ref" href="#Compiling-For-Multiple-Architectures">Compiling For Multiple Architectures</a> for more information
|
|
about building in a directory separate from the source.
|
|
</p>
|
|
<p>If you need to do unusual things to compile Bash, please
|
|
try to figure out how <code class="code">configure</code> could check whether or not
|
|
to do them, and mail diffs or instructions to
|
|
<a class="email" href="mailto:bash-maintainers@gnu.org">bash-maintainers@gnu.org</a> so they can be
|
|
considered for the next release.
|
|
</p>
|
|
<p>The file <samp class="file">configure.ac</samp> is used to create <code class="code">configure</code>
|
|
by a program called Autoconf.
|
|
You only need <samp class="file">configure.ac</samp> if you want to change it or regenerate
|
|
<code class="code">configure</code> using a newer version of Autoconf.
|
|
If you do this, make sure you are using Autoconf version 2.69 or
|
|
newer.
|
|
</p>
|
|
<p>You can remove the program binaries and object files from the
|
|
source code directory by typing ‘<samp class="samp">make clean</samp>’.
|
|
To also remove the
|
|
files that <code class="code">configure</code> created (so you can compile Bash for
|
|
a different kind of computer), type ‘<samp class="samp">make distclean</samp>’.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Compilers-and-Options">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Compiling-For-Multiple-Architectures" accesskey="n" rel="next">Compiling For Multiple Architectures</a>, Previous: <a href="#Basic-Installation" accesskey="p" rel="prev">Basic Installation</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Compilers-and-Options-1"><span>10.2 Compilers and Options<a class="copiable-link" href="#Compilers-and-Options-1"> ¶</a></span></h3>
|
|
|
|
<p>Some systems require unusual options for compilation or linking
|
|
that the <code class="code">configure</code> script does not know about.
|
|
You can give <code class="code">configure</code> initial values for variables by setting
|
|
them in the environment.
|
|
Using a Bourne-compatible shell, you can do that on the command line
|
|
like this:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
|
</pre></div>
|
|
|
|
<p>On systems that have the <code class="code">env</code> program, you can do it like this:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
|
</pre></div>
|
|
|
|
<p>The configuration process uses GCC to build Bash if it
|
|
is available.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Compiling-For-Multiple-Architectures">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Installation-Names" accesskey="n" rel="next">Installation Names</a>, Previous: <a href="#Compilers-and-Options" accesskey="p" rel="prev">Compilers and Options</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Compiling-For-Multiple-Architectures-1"><span>10.3 Compiling For Multiple Architectures<a class="copiable-link" href="#Compiling-For-Multiple-Architectures-1"> ¶</a></span></h3>
|
|
|
|
<p>You can compile Bash for more than one kind of computer at the
|
|
same time, by placing the object files for each architecture in their
|
|
own directory.
|
|
To do this, you must use a version of <code class="code">make</code> that
|
|
supports the <code class="code">VPATH</code> variable, such as GNU <code class="code">make</code>.
|
|
<code class="code">cd</code> to the
|
|
directory where you want the object files and executables to go and run
|
|
the <code class="code">configure</code> script from the source directory
|
|
(see <a class="pxref" href="#Basic-Installation">Basic Installation</a>).
|
|
You may need to
|
|
supply the <samp class="option">--srcdir=PATH</samp> argument to tell <code class="code">configure</code>
|
|
where the source files are.
|
|
<code class="code">configure</code> automatically checks for the
|
|
source code in the directory that <code class="code">configure</code> is in and in <samp class="file">..</samp>.
|
|
</p>
|
|
<p>If you have to use a <code class="code">make</code> that does not support the <code class="code">VPATH</code>
|
|
variable, you can compile Bash for one architecture at a
|
|
time in the source code directory.
|
|
After you have installed
|
|
Bash for one architecture, use ‘<samp class="samp">make distclean</samp>’ before
|
|
reconfiguring for another architecture.
|
|
</p>
|
|
<p>Alternatively, if your system supports symbolic links, you can use the
|
|
<samp class="file">support/mkclone</samp> script to create a build tree which has
|
|
symbolic links back to each file in the source directory.
|
|
Here’s an
|
|
example that creates a build directory in the current directory from a
|
|
source directory <samp class="file">/usr/gnu/src/bash-2.0</samp>:
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
|
|
</pre></div>
|
|
|
|
<p>The <code class="code">mkclone</code> script requires Bash, so you must have already built
|
|
Bash for at least one architecture before you can create build
|
|
directories for other architectures.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Installation-Names">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Specifying-the-System-Type" accesskey="n" rel="next">Specifying the System Type</a>, Previous: <a href="#Compiling-For-Multiple-Architectures" accesskey="p" rel="prev">Compiling For Multiple Architectures</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Installation-Names-1"><span>10.4 Installation Names<a class="copiable-link" href="#Installation-Names-1"> ¶</a></span></h3>
|
|
|
|
<p>By default, ‘<samp class="samp">make install</samp>’ will install into
|
|
<samp class="file">/usr/local/bin</samp>, <samp class="file">/usr/local/man</samp>, etc.;
|
|
that is, the <em class="dfn">installation prefix</em> defaults to <samp class="file">/usr/local</samp>.
|
|
You can specify an installation prefix other than <samp class="file">/usr/local</samp> by
|
|
giving <code class="code">configure</code> the option <samp class="option">--prefix=<var class="var">PATH</var></samp>,
|
|
or by specifying a value for the <code class="env">prefix</code> ‘<samp class="samp">make</samp>’
|
|
variable when running ‘<samp class="samp">make install</samp>’
|
|
(e.g., ‘<samp class="samp">make install prefix=<var class="var">PATH</var></samp>’).
|
|
The <code class="env">prefix</code> variable provides a default for <code class="env">exec_prefix</code> and
|
|
other variables used when installing Bash.
|
|
</p>
|
|
<p>You can specify separate installation prefixes for
|
|
architecture-specific files and architecture-independent files.
|
|
If you give <code class="code">configure</code> the option
|
|
<samp class="option">--exec-prefix=<var class="var">PATH</var></samp>, ‘<samp class="samp">make install</samp>’ will use
|
|
<var class="var">PATH</var> as the prefix for installing programs and libraries.
|
|
Documentation and other data files will still use the regular prefix.
|
|
</p>
|
|
<p>If you would like to change the installation locations for a single run,
|
|
you can specify these variables as arguments to <code class="code">make</code>:
|
|
‘<samp class="samp">make install exec_prefix=/</samp>’ will install <code class="code">bash</code> and
|
|
<code class="code">bashbug</code> into <samp class="file">/bin</samp> instead of the default <samp class="file">/usr/local/bin</samp>.
|
|
</p>
|
|
<p>If you want to see the files Bash will install and where it will install
|
|
them without changing anything on your system, specify the variable
|
|
<code class="env">DESTDIR</code> as an argument to <code class="code">make</code>.
|
|
Its value should be the absolute directory path you’d like to use as the
|
|
root of your sample installation tree.
|
|
For example,
|
|
</p>
|
|
<div class="example">
|
|
<pre class="example-preformatted">mkdir /fs1/bash-install
|
|
make install DESTDIR=/fs1/bash-install
|
|
</pre></div>
|
|
|
|
<p>will install <code class="code">bash</code> into <samp class="file">/fs1/bash-install/usr/local/bin/bash</samp>,
|
|
the documentation into directories within
|
|
<samp class="file">/fs1/bash-install/usr/local/share</samp>, the example loadable builtins into
|
|
<samp class="file">/fs1/bash-install/usr/local/lib/bash</samp>, and so on.
|
|
You can use the usual <code class="env">exec_prefix</code> and <code class="env">prefix</code> variables to alter
|
|
the directory paths beneath the value of <code class="env">DESTDIR</code>.
|
|
</p>
|
|
<p>The GNU Makefile standards provide a more complete description of these
|
|
variables and their effects.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Specifying-the-System-Type">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Sharing-Defaults" accesskey="n" rel="next">Sharing Defaults</a>, Previous: <a href="#Installation-Names" accesskey="p" rel="prev">Installation Names</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Specifying-the-System-Type-1"><span>10.5 Specifying the System Type<a class="copiable-link" href="#Specifying-the-System-Type-1"> ¶</a></span></h3>
|
|
|
|
<p>There may be some features <code class="code">configure</code> can not figure out
|
|
automatically, but needs to determine by the type of host Bash
|
|
will run on.
|
|
Usually <code class="code">configure</code> can figure that
|
|
out, but if it prints a message saying it can not guess the host
|
|
type, give it the <samp class="option">--host=TYPE</samp> option.
|
|
‘<samp class="samp">TYPE</samp>’ can
|
|
either be a short name for the system type, such as ‘<samp class="samp">sun4</samp>’,
|
|
or a canonical name with three fields: ‘<samp class="samp">CPU-COMPANY-SYSTEM</samp>’
|
|
(e.g., ‘<samp class="samp">i386-unknown-freebsd4.2</samp>’).
|
|
</p>
|
|
<p>See the file <samp class="file">support/config.sub</samp> for the possible
|
|
values of each field.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Sharing-Defaults">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Operation-Controls" accesskey="n" rel="next">Operation Controls</a>, Previous: <a href="#Specifying-the-System-Type" accesskey="p" rel="prev">Specifying the System Type</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Sharing-Defaults-1"><span>10.6 Sharing Defaults<a class="copiable-link" href="#Sharing-Defaults-1"> ¶</a></span></h3>
|
|
|
|
<p>If you want to set default values for <code class="code">configure</code> scripts to
|
|
share, you can create a site shell script called
|
|
<code class="code">config.site</code> that gives default values for variables like
|
|
<code class="code">CC</code>, <code class="code">cache_file</code>, and <code class="code">prefix</code>.
|
|
<code class="code">configure</code>
|
|
looks for <samp class="file">PREFIX/share/config.site</samp> if it exists, then
|
|
<samp class="file">PREFIX/etc/config.site</samp> if it exists.
|
|
Or, you can set the
|
|
<code class="code">CONFIG_SITE</code> environment variable to the location of the site
|
|
script.
|
|
A warning: the Bash <code class="code">configure</code> looks for a site script,
|
|
but not all <code class="code">configure</code> scripts do.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Operation-Controls">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Optional-Features" accesskey="n" rel="next">Optional Features</a>, Previous: <a href="#Sharing-Defaults" accesskey="p" rel="prev">Sharing Defaults</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Operation-Controls-1"><span>10.7 Operation Controls<a class="copiable-link" href="#Operation-Controls-1"> ¶</a></span></h3>
|
|
|
|
<p><code class="code">configure</code> recognizes the following options to control how it
|
|
operates.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">--cache-file=<var class="var">file</var></code></dt>
|
|
<dd><p>Use and save the results of the tests in
|
|
<var class="var">file</var> instead of <samp class="file">./config.cache</samp>.
|
|
Set <var class="var">file</var> to <samp class="file">/dev/null</samp> to disable caching,
|
|
for debugging <code class="code">configure</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--help</code></dt>
|
|
<dd><p>Print a summary of the options to <code class="code">configure</code>, and exit.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--quiet</code></dt>
|
|
<dt><code class="code">--silent</code></dt>
|
|
<dt><code class="code">-q</code></dt>
|
|
<dd><p>Do not print messages saying which checks are being made.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--srcdir=<var class="var">dir</var></code></dt>
|
|
<dd><p>Look for the Bash source code in directory <var class="var">dir</var>.
|
|
Usually <code class="code">configure</code> can determine that directory automatically.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--version</code></dt>
|
|
<dd><p>Print the version of Autoconf used to generate the <code class="code">configure</code>
|
|
script, and exit.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p><code class="code">configure</code> also accepts some other, not widely used, boilerplate
|
|
options.
|
|
‘<samp class="samp">configure --help</samp>’ prints the complete list.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="section-level-extent" id="Optional-Features">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Operation-Controls" accesskey="p" rel="prev">Operation Controls</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="section" id="Optional-Features-1"><span>10.8 Optional Features<a class="copiable-link" href="#Optional-Features-1"> ¶</a></span></h3>
|
|
|
|
<p>The Bash <code class="code">configure</code> has a number of <samp class="option">--enable-<var class="var">feature</var></samp>
|
|
options, where <var class="var">feature</var> indicates an optional part of Bash.
|
|
There are also several <samp class="option">--with-<var class="var">package</var></samp> options,
|
|
where <var class="var">package</var> is something like ‘<samp class="samp">bash-malloc</samp>’ or ‘<samp class="samp">afs</samp>’.
|
|
To turn off the default use of a package, use
|
|
<samp class="option">--without-<var class="var">package</var></samp>.
|
|
To configure Bash without a feature
|
|
that is enabled by default, use <samp class="option">--disable-<var class="var">feature</var></samp>.
|
|
</p>
|
|
<p>Here is a complete list of the <samp class="option">--enable-</samp> and <samp class="option">--with-</samp>
|
|
options that the Bash <code class="code">configure</code> recognizes.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">--with-afs</code></dt>
|
|
<dd><p>Define if you are using the Andrew File System from Transarc.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--with-bash-malloc</code></dt>
|
|
<dd><p>Use the Bash version of
|
|
<code class="code">malloc</code> in the directory <samp class="file">lib/malloc</samp>.
|
|
This is not the same
|
|
<code class="code">malloc</code> that appears in <small class="sc">GNU</small> libc, but a custom version
|
|
originally derived from the 4.2 <small class="sc">BSD</small> <code class="code">malloc</code>.
|
|
This <code class="code">malloc</code> is very fast, but wastes some space on each allocation,
|
|
though it uses several techniques to minimize the waste.
|
|
This option is enabled by default.
|
|
The <samp class="file">NOTES</samp> file contains a list of systems for
|
|
which this should be turned off, and <code class="code">configure</code> disables this
|
|
option automatically for a number of systems.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--with-curses[=<var class="var">LIBNAME</var>]</code></dt>
|
|
<dd><p>Use the curses library instead of the termcap library as the library
|
|
where the linker can find the termcap functions.
|
|
<code class="code">configure</code> usually chooses this automatically, since most systems
|
|
include the termcap functions in the curses library.
|
|
If <var class="var">LIBNAME</var> is supplied, <code class="code">configure</code> does not search for an
|
|
appropriate library and uses <var class="var">LIBNAME</var> instead.
|
|
<var class="var">LIBNAME</var> should be either an argument for the linker
|
|
(e.g., <samp class="option">-l<var class="var">libname</var></samp>)
|
|
or a filename
|
|
(e.g., <samp class="file">/opt/local/lib/libncursesw.so</samp>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--with-gnu-malloc</code></dt>
|
|
<dd><p>A synonym for <code class="code">--with-bash-malloc</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--with-installed-readline[=<var class="var">PREFIX</var>]</code></dt>
|
|
<dd><p>Define this to make Bash link with a locally-installed version of Readline
|
|
rather than the version in <samp class="file">lib/readline</samp>.
|
|
This works only with Readline 5.0 and later versions.
|
|
If <var class="var">PREFIX</var> is <code class="code">yes</code> or not
|
|
supplied, <code class="code">configure</code> uses the values of the make variables
|
|
<code class="code">includedir</code> and <code class="code">libdir</code>, which are subdirectories of <code class="code">prefix</code>
|
|
by default, to find the installed version of Readline if it is not in
|
|
the standard system include and library directories.
|
|
If <var class="var">PREFIX</var> is <code class="code">no</code>, Bash links with the version in
|
|
<samp class="file">lib/readline</samp>.
|
|
If <var class="var">PREFIX</var> is set to any other value, <code class="code">configure</code> treats it as
|
|
a directory pathname and looks for
|
|
the installed version of Readline in subdirectories of that directory
|
|
(include files in <var class="var">PREFIX</var>/<code class="code">include</code> and the library in
|
|
<var class="var">PREFIX</var>/<code class="code">lib</code>).
|
|
The Bash default is to link with a static library built in the
|
|
<samp class="file">lib/readline</samp> subdirectory of the build directory.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--with-libintl-prefix[=<var class="var">PREFIX</var>]</code></dt>
|
|
<dd><p>Define this to make Bash link with a locally-installed version of the
|
|
libintl library instead of the version in <samp class="file">lib/intl</samp>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--with-libiconv-prefix[=<var class="var">PREFIX</var>]</code></dt>
|
|
<dd><p>Define this to make Bash look for libiconv in <var class="var">PREFIX</var> instead of the
|
|
standard system locations.
|
|
The Bash distribution does not include this library.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-minimal-config</code></dt>
|
|
<dd><p>This produces a shell with minimal features, closer to the historical
|
|
Bourne shell.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>There are several <samp class="option">--enable-</samp> options that alter how Bash is
|
|
compiled, linked, and installed, rather than changing run-time features.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">--enable-largefile</code></dt>
|
|
<dd><p>Enable support for <a class="url" href="http://www.unix.org/version2/whatsnew/lfs20mar.html">large files</a> if the operating system requires special compiler options
|
|
to build programs which can access large files.
|
|
This is enabled by
|
|
default, if the operating system provides large file support.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-profiling</code></dt>
|
|
<dd><p>This builds a Bash binary that produces profiling information to be
|
|
processed by <code class="code">gprof</code> each time it is executed.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-separate-helpfiles</code></dt>
|
|
<dd><p>Use external files for the documentation displayed by the <code class="code">help</code> builtin
|
|
instead of storing the text internally.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-static-link</code></dt>
|
|
<dd><p>This causes Bash to be linked statically, if <code class="code">gcc</code> is being used.
|
|
This could be used to build a version to use as root’s shell.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>The ‘<samp class="samp">minimal-config</samp>’ option can be used to disable all of
|
|
the following options, but it is processed first, so individual
|
|
options may be enabled using ‘<samp class="samp">enable-<var class="var">feature</var></samp>’.
|
|
</p>
|
|
<p>All of the following options except for
|
|
‘<samp class="samp">alt-array-implementation</samp>’,
|
|
‘<samp class="samp">disabled-builtins</samp>’,
|
|
‘<samp class="samp">direxpand-default</samp>’,
|
|
‘<samp class="samp">strict-posix-default</samp>’,
|
|
and
|
|
‘<samp class="samp">xpg-echo-default</samp>’ are
|
|
enabled by default, unless the operating system does not provide the
|
|
necessary support.
|
|
</p>
|
|
<dl class="table">
|
|
<dt><code class="code">--enable-alias</code></dt>
|
|
<dd><p>Allow alias expansion and include the <code class="code">alias</code> and <code class="code">unalias</code>
|
|
builtins (see <a class="pxref" href="#Aliases">Aliases</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-alt-array-implementation</code></dt>
|
|
<dd><p>This builds Bash using an alternate implementation of arrays
|
|
(see <a class="pxref" href="#Arrays">Arrays</a>) that provides faster access at the expense of using
|
|
more memory (sometimes many times more, depending on how sparse an array is).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-arith-for-command</code></dt>
|
|
<dd><p>Include support for the alternate form of the <code class="code">for</code> command
|
|
that behaves like the C language <code class="code">for</code> statement
|
|
(see <a class="pxref" href="#Looping-Constructs">Looping Constructs</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-array-variables</code></dt>
|
|
<dd><p>Include support for one-dimensional array shell variables
|
|
(see <a class="pxref" href="#Arrays">Arrays</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-bang-history</code></dt>
|
|
<dd><p>Include support for <code class="code">csh</code>-like history substitution
|
|
(see <a class="pxref" href="#History-Interaction">History Expansion</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-bash-source-fullpath-default</code></dt>
|
|
<dd><p>Set the default value of the <code class="code">bash_source_fullpath</code> shell option
|
|
described above under <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled.
|
|
This controls how filenames are assigned to the <code class="code">BASH_SOURCE</code>
|
|
array variable.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-brace-expansion</code></dt>
|
|
<dd><p>Include <code class="code">csh</code>-like brace expansion
|
|
( <code class="code">b{a,b}c</code> → <code class="code">bac bbc</code> ).
|
|
See <a class="ref" href="#Brace-Expansion">Brace Expansion</a>, for a complete description.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-casemod-attributes</code></dt>
|
|
<dd><p>Include support for case-modifying attributes in the <code class="code">declare</code> builtin
|
|
and assignment statements.
|
|
Variables with the <code class="code">uppercase</code> attribute,
|
|
for example, will have their values converted to uppercase upon assignment.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-casemod-expansion</code></dt>
|
|
<dd><p>Include support for case-modifying word expansions.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-command-timing</code></dt>
|
|
<dd><p>Include support for recognizing <code class="code">time</code> as a reserved word and for
|
|
displaying timing statistics for the pipeline following <code class="code">time</code>
|
|
(see <a class="pxref" href="#Pipelines">Pipelines</a>).
|
|
This allows timing pipelines, shell compound commands, shell builtins,
|
|
and shell functions, which an external command cannot do easily.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-cond-command</code></dt>
|
|
<dd><p>Include support for the <code class="code">[[</code> conditional command.
|
|
(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-cond-regexp</code></dt>
|
|
<dd><p>Include support for matching <small class="sc">POSIX</small> regular expressions using the
|
|
‘<samp class="samp">=~</samp>’ binary operator in the <code class="code">[[</code> conditional command.
|
|
(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-coprocesses</code></dt>
|
|
<dd><p>Include support for coprocesses and the <code class="code">coproc</code> reserved word
|
|
(see <a class="pxref" href="#Pipelines">Pipelines</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-debugger</code></dt>
|
|
<dd><p>Include support for the Bash debugger (distributed separately).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-dev-fd-stat-broken</code></dt>
|
|
<dd><p>If calling <code class="code">stat</code> on /dev/fd/<var class="var">N</var> returns different results than
|
|
calling <code class="code">fstat</code> on file descriptor <var class="var">N</var>, supply this option to
|
|
enable a workaround.
|
|
This has implications for conditional commands that test file attributes.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-direxpand-default</code></dt>
|
|
<dd><p>Cause the <code class="code">direxpand</code> shell option (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
to be enabled by default when the shell starts.
|
|
It is normally disabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-directory-stack</code></dt>
|
|
<dd><p>Include support for a <code class="code">csh</code>-like directory stack and the
|
|
<code class="code">pushd</code>, <code class="code">popd</code>, and <code class="code">dirs</code> builtins
|
|
(see <a class="pxref" href="#The-Directory-Stack">The Directory Stack</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-disabled-builtins</code></dt>
|
|
<dd><p>Allow builtin commands to be invoked via ‘<samp class="samp">builtin xxx</samp>’
|
|
even after <code class="code">xxx</code> has been disabled using ‘<samp class="samp">enable -n xxx</samp>’.
|
|
See <a class="ref" href="#Bash-Builtins">Bash Builtin Commands</a>, for details of the <code class="code">builtin</code> and
|
|
<code class="code">enable</code> builtin commands.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-dparen-arithmetic</code></dt>
|
|
<dd><p>Include support for the <code class="code">((…))</code> command
|
|
(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-extended-glob</code></dt>
|
|
<dd><p>Include support for the extended pattern matching features described
|
|
above under <a class="ref" href="#Pattern-Matching">Pattern Matching</a>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-extended-glob-default</code></dt>
|
|
<dd><p>Set the default value of the <code class="code">extglob</code> shell option described
|
|
above under <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-function-import</code></dt>
|
|
<dd><p>Include support for importing function definitions exported by another
|
|
instance of the shell from the environment.
|
|
This option is enabled by default.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-glob-asciiranges-default</code></dt>
|
|
<dd><p>Set the default value of the <code class="code">globasciiranges</code> shell option described
|
|
above under <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled.
|
|
This controls the behavior of character ranges when used in pattern matching
|
|
bracket expressions.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-help-builtin</code></dt>
|
|
<dd><p>Include the <code class="code">help</code> builtin, which displays help on shell builtins and
|
|
variables (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-history</code></dt>
|
|
<dd><p>Include command history and the <code class="code">fc</code> and <code class="code">history</code>
|
|
builtin commands (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-job-control</code></dt>
|
|
<dd><p>This enables the job control features (see <a class="pxref" href="#Job-Control">Job Control</a>),
|
|
if the operating system supports them.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-multibyte</code></dt>
|
|
<dd><p>This enables support for multibyte characters if the operating
|
|
system provides the necessary support.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-net-redirections</code></dt>
|
|
<dd><p>This enables the special handling of filenames of the form
|
|
<code class="code">/dev/tcp/<var class="var">host</var>/<var class="var">port</var></code> and
|
|
<code class="code">/dev/udp/<var class="var">host</var>/<var class="var">port</var></code>
|
|
when used in redirections (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-process-substitution</code></dt>
|
|
<dd><p>This enables process substitution (see <a class="pxref" href="#Process-Substitution">Process Substitution</a>) if
|
|
the operating system provides the necessary support.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-progcomp</code></dt>
|
|
<dd><p>Enable the programmable completion facilities
|
|
(see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>).
|
|
If Readline is not enabled, this option has no effect.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-prompt-string-decoding</code></dt>
|
|
<dd><p>Turn on the interpretation of a number of backslash-escaped characters
|
|
in the <code class="env">$PS0</code>, <code class="env">$PS1</code>, <code class="env">$PS2</code>, and <code class="env">$PS4</code> prompt
|
|
strings.
|
|
See <a class="ref" href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt
|
|
string escape sequences.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-readline</code></dt>
|
|
<dd><p>Include support for command-line editing and history with the Bash
|
|
version of the Readline library (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-restricted</code></dt>
|
|
<dd><p>Include support for a <em class="dfn">restricted shell</em>.
|
|
If this is enabled,
|
|
Bash enters a restricted mode when called as <code class="code">rbash</code>.
|
|
See <a class="ref" href="#The-Restricted-Shell">The Restricted Shell</a>, for a description of restricted mode.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-select</code></dt>
|
|
<dd><p>Include the <code class="code">select</code> compound command, which allows generation of
|
|
simple menus (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-single-help-strings</code></dt>
|
|
<dd><p>Store the text displayed by the <code class="code">help</code> builtin as a single string for
|
|
each help topic.
|
|
This aids in translating the text to different languages.
|
|
You may need to disable this if your compiler cannot handle very long string
|
|
literals.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-strict-posix-default</code></dt>
|
|
<dd><p>Make Bash <small class="sc">POSIX</small>-conformant by default (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-translatable-strings</code></dt>
|
|
<dd><p>Enable support for <code class="code">$"<var class="var">string</var>"</code> translatable strings
|
|
(see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>).
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-usg-echo-default</code></dt>
|
|
<dd><p>A synonym for <code class="code">--enable-xpg-echo-default</code>.
|
|
</p>
|
|
</dd>
|
|
<dt><code class="code">--enable-xpg-echo-default</code></dt>
|
|
<dd><p>Make the <code class="code">echo</code> builtin expand backslash-escaped characters by default,
|
|
without requiring the <samp class="option">-e</samp> option.
|
|
This sets the default value of the <code class="code">xpg_echo</code> shell option to <code class="code">on</code>,
|
|
which makes the Bash <code class="code">echo</code> behave more like the version specified in
|
|
the Single Unix Specification, version 3.
|
|
See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>, for a description of the escape sequences that
|
|
<code class="code">echo</code> recognizes.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>The file <samp class="file">config-top.h</samp> contains C Preprocessor
|
|
‘<samp class="samp">#define</samp>’ statements for options which are not settable from
|
|
<code class="code">configure</code>.
|
|
Some of these are not meant to be changed; beware of the consequences if
|
|
you do.
|
|
Read the comments associated with each definition for more
|
|
information about its effect.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="appendix-level-extent" id="Reporting-Bugs">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Major-Differences-From-The-Bourne-Shell" accesskey="n" rel="next">Major Differences From The Bourne Shell</a>, Previous: <a href="#Installing-Bash" accesskey="p" rel="prev">Installing Bash</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="appendix" id="Reporting-Bugs-1"><span>Appendix A Reporting Bugs<a class="copiable-link" href="#Reporting-Bugs-1"> ¶</a></span></h2>
|
|
|
|
<p>Please report all bugs you find in Bash.
|
|
But first, you should
|
|
make sure that it really is a bug, and that it appears in the latest
|
|
version of Bash.
|
|
The latest released version of Bash is always available for FTP from
|
|
<a class="uref" href="ftp://ftp.gnu.org/pub/gnu/bash/">ftp://ftp.gnu.org/pub/gnu/bash/</a> and from
|
|
<a class="uref" href="http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz">http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz</a>.
|
|
</p>
|
|
<p>Once you have determined that a bug actually exists, use the
|
|
<code class="code">bashbug</code> command to submit a bug report or use the form at the
|
|
<a class="uref" href="https://savannah.gnu.org/projects/bash/">Bash project page</a>.
|
|
If you have a fix, you are encouraged to submit that as well!
|
|
Suggestions and “philosophical” bug reports may be mailed
|
|
to <a class="email" href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a> or <a class="email" href="mailto:help-bash@gnu.org">help-bash@gnu.org</a>.
|
|
</p>
|
|
<p>All bug reports should include:
|
|
</p><ul class="itemize mark-bullet">
|
|
<li>The version number of Bash.
|
|
</li><li>The hardware and operating system.
|
|
</li><li>The compiler used to compile Bash.
|
|
</li><li>A description of the bug behavior.
|
|
</li><li>A short script or “recipe” which exercises the bug and may be used
|
|
to reproduce it.
|
|
</li></ul>
|
|
|
|
<p><code class="code">bashbug</code> inserts the first three items automatically into
|
|
the template it provides for filing a bug report.
|
|
</p>
|
|
<p>Please send all reports concerning this manual to
|
|
<a class="email" href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a>.
|
|
</p>
|
|
<hr>
|
|
</div>
|
|
<div class="appendix-level-extent" id="Major-Differences-From-The-Bourne-Shell">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#GNU-Free-Documentation-License" accesskey="n" rel="next">GNU Free Documentation License</a>, Previous: <a href="#Reporting-Bugs" accesskey="p" rel="prev">Reporting Bugs</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="appendix" id="Major-Differences-From-The-Bourne-Shell-1"><span>Appendix B Major Differences From The Bourne Shell<a class="copiable-link" href="#Major-Differences-From-The-Bourne-Shell-1"> ¶</a></span></h2>
|
|
|
|
<p>Bash implements essentially the same grammar, parameter and
|
|
variable expansion, redirection, and quoting as the Bourne Shell.
|
|
Bash uses the <small class="sc">POSIX</small> standard as the specification of
|
|
how these features are to be implemented and how they should behave.
|
|
There are some
|
|
differences between the traditional Bourne shell and Bash; this
|
|
section quickly details the differences of significance.
|
|
A number of these differences are explained in greater depth in
|
|
previous sections.
|
|
This section uses the version of <code class="code">sh</code> included in SVR4.2 (the
|
|
last version of the historical Bourne shell) as the baseline reference.
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>Bash is <small class="sc">POSIX</small>-conformant, even where the <small class="sc">POSIX</small> specification
|
|
differs from traditional <code class="code">sh</code> behavior (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>).
|
|
|
|
</li><li>Bash has multi-character invocation options (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>).
|
|
|
|
</li><li>The Bash restricted mode is more useful (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>);
|
|
the SVR4.2 shell restricted mode is too limited.
|
|
|
|
</li><li>Bash has command-line editing (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) and
|
|
the <code class="code">bind</code> builtin.
|
|
|
|
</li><li>Bash provides a programmable word completion mechanism
|
|
(see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>), and builtin commands
|
|
<code class="code">complete</code>, <code class="code">compgen</code>, and <code class="code">compopt</code>, to
|
|
manipulate it.
|
|
|
|
</li><li>Bash decodes a number of backslash-escape sequences in the prompt string
|
|
variables (<code class="code">PS0</code>, <code class="code">PS1</code>, <code class="code">PS2</code>, and <code class="code">PS4</code>)
|
|
(see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>).
|
|
|
|
</li><li>Bash expands and displays the <code class="code">PS0</code> prompt string variable.
|
|
|
|
</li><li>Bash runs commands from the <code class="code">PROMPT_COMMAND</code> array variable before
|
|
issuing each primary prompt.
|
|
|
|
</li><li>Bash has command history (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>) and the
|
|
<code class="code">history</code> and <code class="code">fc</code> builtins to manipulate it.
|
|
The Bash history list maintains timestamp information and uses the
|
|
value of the <code class="code">HISTTIMEFORMAT</code> variable to display it.
|
|
|
|
</li><li>Bash implements <code class="code">csh</code>-like history expansion
|
|
(see <a class="pxref" href="#History-Interaction">History Expansion</a>).
|
|
|
|
</li><li>Bash supports the <code class="code">$'…'</code> quoting syntax, which expands ANSI-C
|
|
backslash-escaped characters in the text between the single quotes
|
|
(see <a class="pxref" href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>).
|
|
|
|
</li><li>Bash supports the <code class="code">$"…"</code> quoting syntax and performs
|
|
locale-specific translation of the characters between the double
|
|
quotes.
|
|
The <samp class="option">-D</samp>, <samp class="option">--dump-strings</samp>, and <samp class="option">--dump-po-strings</samp>
|
|
invocation options list the translatable strings found in a script
|
|
(see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>).
|
|
|
|
</li><li>Bash includes brace expansion (see <a class="pxref" href="#Brace-Expansion">Brace Expansion</a>) and tilde
|
|
expansion (see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>).
|
|
|
|
</li><li>Bash implements command aliases and the <code class="code">alias</code> and <code class="code">unalias</code>
|
|
builtins (see <a class="pxref" href="#Aliases">Aliases</a>).
|
|
|
|
</li><li>Bash implements the <code class="code">!</code> reserved word to negate the return value of
|
|
a pipeline (see <a class="pxref" href="#Pipelines">Pipelines</a>).
|
|
This is very useful when an <code class="code">if</code> statement needs to act only if a
|
|
test fails.
|
|
The Bash ‘<samp class="samp">-o pipefail</samp>’ option to <code class="code">set</code> will cause a pipeline to
|
|
return a failure status if any command fails
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
</li><li>Bash has the <code class="code">time</code> reserved word and command timing (see <a class="pxref" href="#Pipelines">Pipelines</a>).
|
|
The display of the timing statistics may be controlled with the
|
|
<code class="env">TIMEFORMAT</code> variable.
|
|
|
|
</li><li>Bash provides coprocesses and the <code class="code">coproc</code> reserved word
|
|
(see <a class="pxref" href="#Coprocesses">Coprocesses</a>).
|
|
|
|
</li><li>Bash implements the <code class="code">for (( <var class="var">expr1</var> ; <var class="var">expr2</var> ; <var class="var">expr3</var> ))</code>
|
|
arithmetic for command, similar to the C language (see <a class="pxref" href="#Looping-Constructs">Looping Constructs</a>).
|
|
|
|
</li><li>Bash includes the <code class="code">select</code> compound command, which allows the
|
|
generation of simple menus (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
</li><li>Bash includes the <code class="code">[[</code> compound command, which makes conditional
|
|
testing part of the shell grammar (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>), including
|
|
optional regular expression matching.
|
|
|
|
</li><li>Bash provides optional case-insensitive matching for the <code class="code">case</code> and
|
|
<code class="code">[[</code> constructs (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
</li><li>Bash provides additional <code class="code">case</code> statement action list terminators:
|
|
‘<samp class="samp">;&</samp>’ and ‘<samp class="samp">;;&</samp>’ (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
</li><li>Bash provides shell arithmetic,
|
|
the <code class="code">((</code> compound command (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>),
|
|
the <code class="code">let</code> builtin,
|
|
and arithmetic expansion (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
|
|
</li><li>Bash has one-dimensional array variables (see <a class="pxref" href="#Arrays">Arrays</a>), and the
|
|
appropriate variable expansions and assignment syntax to use them.
|
|
Several of the Bash builtins take options to act on arrays.
|
|
Bash provides a number of built-in array variables.
|
|
|
|
</li><li>Variables present in the shell’s initial environment are automatically
|
|
exported to child processes (see <a class="pxref" href="#Command-Execution-Environment">Command Execution Environment</a>).
|
|
The Bourne shell does not normally do
|
|
this unless the variables are explicitly marked using the <code class="code">export</code>
|
|
command.
|
|
|
|
</li><li>Bash can expand positional parameters beyond <code class="code">$9</code> using
|
|
<code class="code">${<var class="var">num</var>}</code> (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
</li><li>Bash supports the ‘<samp class="samp">+=</samp>’ assignment operator, which appends to the value
|
|
of the variable named on the left hand side
|
|
(see <a class="pxref" href="#Shell-Parameters">Shell Parameters</a>).
|
|
|
|
</li><li>Bash includes the <small class="sc">POSIX</small> pattern removal ‘<samp class="samp">%</samp>’, ‘<samp class="samp">#</samp>’, ‘<samp class="samp">%%</samp>’
|
|
and ‘<samp class="samp">##</samp>’ expansions to remove leading or trailing substrings from
|
|
variable values (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
</li><li>The expansion <code class="code">${#xx}</code>, which returns the length of <code class="code">${xx}</code>,
|
|
is supported (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
</li><li>The expansion <code class="code">${var:</code><var class="var">offset</var><code class="code">[:</code><var class="var">length</var><code class="code">]}</code>,
|
|
which expands to the substring of <code class="code">var</code>’s value of length
|
|
<var class="var">length</var>, beginning at <var class="var">offset</var>, is present
|
|
(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
</li><li>The expansion
|
|
<code class="code">${<var class="var">var</var>/[/]</code><var class="var">pattern</var><code class="code">[/</code><var class="var">replacement</var><code class="code">]}</code>,
|
|
which matches <var class="var">pattern</var> and replaces it with <var class="var">replacement</var> in
|
|
the value of <var class="var">var</var>, is available (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>),
|
|
with a mechanism to use the matched text in <var class="var">replacement</var>.
|
|
|
|
</li><li>The expansion <code class="code">${!<var class="var">prefix</var>*}</code> expansion, which expands to
|
|
the names of all shell variables whose names begin with <var class="var">prefix</var>,
|
|
is available (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
</li><li>Bash has indirect variable expansion using <code class="code">${!word}</code>
|
|
(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>) and implements the <code class="code">nameref</code>
|
|
variable attribute for automatic indirect variable expansion.
|
|
|
|
</li><li>Bash includes a set of parameter transformation word expansions of the
|
|
form <code class="code">${var@X}</code>, where ‘<samp class="samp">X</samp>’ specifies the transformation
|
|
(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
</li><li>The <small class="sc">POSIX</small> <code class="code">$()</code> form of command substitution
|
|
is implemented (see <a class="pxref" href="#Command-Substitution">Command Substitution</a>),
|
|
and preferred to the Bourne shell’s <code class="code">``</code> (which
|
|
is also implemented for backwards compatibility).
|
|
|
|
</li><li>Bash implements a variant of command substitution that runs the enclosed
|
|
command in the current shell execution environment:
|
|
<code class="code">${ <var class="var">command</var>;}</code> or <code class="code">${|<var class="var">command</var>;}</code>
|
|
(see <a class="pxref" href="#Command-Substitution">Command Substitution</a>).
|
|
|
|
</li><li>Bash has process substitution (see <a class="pxref" href="#Process-Substitution">Process Substitution</a>).
|
|
|
|
</li><li>Bash automatically assigns variables that provide information about the
|
|
current user (<code class="env">UID</code>, <code class="env">EUID</code>, and <code class="env">GROUPS</code>), the current host
|
|
(<code class="env">HOSTTYPE</code>, <code class="env">OSTYPE</code>, <code class="env">MACHTYPE</code>, and <code class="env">HOSTNAME</code>),
|
|
and the instance of Bash that is running (<code class="env">BASH</code>,
|
|
<code class="env">BASH_VERSION</code>, and <code class="env">BASH_VERSINFO</code>).
|
|
See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for details.
|
|
|
|
</li><li>Bash uses many variables to provide functionality and customize shell
|
|
behavior that the Bourne shell does not.
|
|
Examples include <code class="env">RANDOM</code>, <code class="env">SRANDOM</code>, <code class="env">EPOCHSECONDS</code>,
|
|
<code class="env">EPOCHREALTIME</code>,
|
|
<code class="env">TIMEFORMAT</code>, <code class="env">BASHPID</code>, <code class="env">BASH_XTRACEFD</code>,
|
|
<code class="env">GLOBIGNORE</code>, <code class="env">HISTIGNORE</code>, and <code class="env">BASH_VERSION</code>.
|
|
See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a complete list.
|
|
|
|
</li><li>Bash uses the <code class="code">GLOBSORT</code> shell variable to control how to sort
|
|
the results of filename expansion (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>).
|
|
|
|
</li><li>Bash uses the <code class="env">IFS</code> variable to split only the results of expansion,
|
|
not all words (see <a class="pxref" href="#Word-Splitting">Word Splitting</a>).
|
|
This closes a longstanding shell security hole.
|
|
|
|
</li><li>The filename expansion bracket expression code uses ‘<samp class="samp">!</samp>’ and ‘<samp class="samp">^</samp>’
|
|
to negate the set of characters between the brackets
|
|
(see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>).
|
|
The Bourne shell uses only ‘<samp class="samp">!</samp>’.
|
|
|
|
</li><li>Bash implements the full set of <small class="sc">POSIX</small> filename expansion operators,
|
|
including character classes, equivalence classes, and
|
|
collating symbols (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>).
|
|
|
|
</li><li>Bash implements extended pattern matching features when the <code class="code">extglob</code>
|
|
shell option is enabled (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>).
|
|
|
|
</li><li>The <code class="code">globstar</code> shell option extends filename expansion to recursively
|
|
scan directories and subdirectories for matching filenames
|
|
(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>).
|
|
|
|
</li><li>It is possible to have a variable and a function with the same name;
|
|
<code class="code">sh</code> does not separate the two name spaces.
|
|
|
|
</li><li>Bash functions are permitted to have local variables using the
|
|
<code class="code">local</code> builtin, and thus users can write useful recursive functions
|
|
(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
|
|
</li><li>Bash performs filename expansion on filenames specified as operands
|
|
to input and output redirection operators (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
|
|
</li><li>Bash contains the ‘<samp class="samp"><></samp>’ redirection operator, allowing a file to be
|
|
opened for both reading and writing, and the ‘<samp class="samp">&></samp>’ redirection
|
|
operator, for directing standard output and standard error to the same
|
|
file (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
|
|
</li><li>Bash includes the ‘<samp class="samp"><<<</samp>’ redirection operator, allowing a string to
|
|
be used as the standard input to a command (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
|
|
</li><li>Bash implements the ‘<samp class="samp">[n]<&<var class="var">word</var></samp>’ and ‘<samp class="samp">[n]>&<var class="var">word</var></samp>’
|
|
redirection operators, which move one file descriptor to another.
|
|
|
|
</li><li>Bash treats a number of filenames specially when they are
|
|
used in redirection operators (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
|
|
</li><li>Bash provides the {<var class="var">var</var>}<<var class="var">word</var> capability to have the
|
|
shell allocate file descriptors for redirections and assign them
|
|
to <var class="var">var</var> (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
This works with multiple redirection operators.
|
|
|
|
</li><li>Bash can open network connections to arbitrary machines and services
|
|
with the redirection operators (see <a class="pxref" href="#Redirections">Redirections</a>).
|
|
|
|
</li><li>The <code class="code">noclobber</code> option is available to avoid overwriting existing
|
|
files with output redirection (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
The ‘<samp class="samp">>|</samp>’ redirection operator may be used to override <code class="code">noclobber</code>.
|
|
|
|
</li><li>Variable assignments preceding commands affect only that command, even
|
|
builtins and functions (see <a class="pxref" href="#Environment">Environment</a>).
|
|
In <code class="code">sh</code>, all variable assignments
|
|
preceding commands are global unless the command is executed from the
|
|
file system.
|
|
|
|
</li><li>Bash includes a number of features to support a separate debugger for
|
|
shell scripts:
|
|
variables (<code class="code">BASH_ARGC</code>, <code class="code">BASH_ARGV</code>, <code class="code">BASH_LINENO</code>,
|
|
<code class="code">BASH_SOURCE</code>),
|
|
the <code class="code">DEBUG</code>, <code class="code">RETURN</code>, and <code class="code">ERR</code> traps,
|
|
‘<samp class="samp">declare -F</samp>’,
|
|
and
|
|
the <code class="code">caller</code> builtin.
|
|
|
|
</li><li>Bash implements a <code class="code">csh</code>-like directory stack, and provides the
|
|
<code class="code">pushd</code>, <code class="code">popd</code>, and <code class="code">dirs</code> builtins to manipulate it
|
|
(see <a class="pxref" href="#The-Directory-Stack">The Directory Stack</a>).
|
|
Bash also makes the directory stack visible as the value of the
|
|
<code class="env">DIRSTACK</code> shell variable.
|
|
|
|
</li><li>Bash allows a function to override a builtin with the same name, and provides
|
|
access to that builtin’s functionality within the function via the
|
|
<code class="code">builtin</code> and <code class="code">command</code> builtins (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
|
|
</li><li>Bash includes the <code class="code">caller</code> builtin
|
|
(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>), which displays the context of
|
|
any active subroutine call (a shell function or a script executed with
|
|
the <code class="code">.</code> or <code class="code">source</code> builtins).
|
|
This supports the Bash debugger.
|
|
|
|
</li><li>The Bash <code class="code">cd</code> and <code class="code">pwd</code> builtins (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
each take <samp class="option">-L</samp> and <samp class="option">-P</samp> options to switch between logical and
|
|
physical modes.
|
|
|
|
</li><li>The <code class="code">command</code> builtin allows selectively skipping shell functions
|
|
when performing command lookup (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
|
|
</li><li>Bash uses the <code class="code">declare</code> builtin to modify the full set of variable
|
|
and function attributes, and to assign values to variables.
|
|
|
|
</li><li>The <code class="code">disown</code> builtin can remove a job from the internal shell
|
|
job table (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>) or suppress sending
|
|
<code class="code">SIGHUP</code> to a job when the shell exits as the result of a
|
|
<code class="code">SIGHUP</code>.
|
|
|
|
</li><li>The <code class="code">enable</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>) can enable or disable
|
|
individual builtins
|
|
and implements support for dynamically loading
|
|
builtin commands from shared objects.
|
|
|
|
</li><li>The Bash <code class="code">exec</code> builtin takes additional options that allow users
|
|
to control the contents of the environment passed to the executed
|
|
command, and what the zeroth argument to the command is to be
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
</li><li>Shell functions may be exported to children via the environment
|
|
using <code class="code">export -f</code> (see <a class="pxref" href="#Shell-Functions">Shell Functions</a>).
|
|
|
|
</li><li>The Bash <code class="code">export</code> and <code class="code">readonly</code> builtins
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) can
|
|
take a <samp class="option">-f</samp> option to act on shell functions, a <samp class="option">-p</samp> option to
|
|
display variables with various attributes set in a format that can be
|
|
used as shell input, a <samp class="option">-n</samp> option to remove various variable
|
|
attributes, and ‘<samp class="samp">name=value</samp>’ arguments to set variable attributes
|
|
and values simultaneously.
|
|
|
|
</li><li>The Bash <code class="code">hash</code> builtin allows a name to be associated with
|
|
an arbitrary filename, even when that filename cannot be found by
|
|
searching the <code class="env">$PATH</code>, using ‘<samp class="samp">hash -p</samp>’
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
</li><li>Bash includes a <code class="code">help</code> builtin for quick reference to shell
|
|
facilities (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
|
|
</li><li>Bash includes the <code class="code">mapfile</code> builtin to quickly read the contents
|
|
of a file into an indexed array variable (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
|
|
</li><li>The <code class="code">printf</code> builtin is available to display formatted output
|
|
(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>),
|
|
and has additional custom format specifiers and an option to assign
|
|
the formatted output directly to a shell variable.
|
|
|
|
</li><li>The Bash <code class="code">read</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>)
|
|
will read a line ending in ‘<samp class="samp">\</samp>’ with
|
|
the <samp class="option">-r</samp> option, and will use the <code class="env">REPLY</code> variable as a
|
|
default if no non-option arguments are supplied.
|
|
|
|
</li><li>The <code class="code">read</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>)
|
|
accepts a prompt string with the <samp class="option">-p</samp> option and will use
|
|
Readline to obtain the line when given the <samp class="option">-e</samp> or <samp class="option">-E</samp>
|
|
options,
|
|
with the ability to insert text into the line using the <samp class="option">-i</samp>
|
|
option.
|
|
The <code class="code">read</code> builtin also has additional options to control input:
|
|
the <samp class="option">-s</samp> option will turn off echoing of input characters as
|
|
they are read, the <samp class="option">-t</samp> option will allow <code class="code">read</code> to time out
|
|
if input does not arrive within a specified number of seconds, the
|
|
<samp class="option">-n</samp> option will allow reading only a specified number of
|
|
characters rather than a full line, and the <samp class="option">-d</samp> option will read
|
|
until a particular character rather than newline.
|
|
|
|
</li><li>The <code class="code">return</code> builtin may be used to abort execution of scripts
|
|
executed with the <code class="code">.</code> or <code class="code">source</code> builtins
|
|
(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
</li><li>Bash has much more optional behavior controllable with the <code class="code">set</code>
|
|
builtin (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
</li><li>The <samp class="option">-x</samp> (<samp class="option">xtrace</samp>) option displays commands other than
|
|
simple commands when performing an execution trace
|
|
(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
</li><li>Bash includes the <code class="code">shopt</code> builtin, for finer control of shell
|
|
optional capabilities (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), and allows these options
|
|
to be set and unset at shell invocation (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>).
|
|
|
|
</li><li>The <code class="code">test</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
is slightly different, as it implements the <small class="sc">POSIX</small> algorithm,
|
|
which specifies the behavior based on the number of arguments.
|
|
|
|
</li><li>The <code class="code">trap</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a
|
|
<code class="code">DEBUG</code> pseudo-signal specification, similar to <code class="code">EXIT</code>.
|
|
Commands specified with a <code class="code">DEBUG</code> trap are executed before every
|
|
simple command, <code class="code">for</code> command, <code class="code">case</code> command,
|
|
<code class="code">select</code> command, every arithmetic <code class="code">for</code> command, and before
|
|
the first command executes in a shell function.
|
|
The <code class="code">DEBUG</code> trap is not inherited by shell functions unless the
|
|
function has been given the <code class="code">trace</code> attribute or the
|
|
<code class="code">functrace</code> option has been enabled using the <code class="code">shopt</code> builtin.
|
|
The <code class="code">extdebug</code> shell option has additional effects on the
|
|
<code class="code">DEBUG</code> trap.
|
|
|
|
<p>The <code class="code">trap</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows an
|
|
<code class="code">ERR</code> pseudo-signal specification, similar to <code class="code">EXIT</code> and <code class="code">DEBUG</code>.
|
|
Commands specified with an <code class="code">ERR</code> trap are executed after a simple
|
|
command fails, with a few exceptions.
|
|
The <code class="code">ERR</code> trap is not inherited by shell functions unless the
|
|
<code class="code">-o errtrace</code> option to the <code class="code">set</code> builtin is enabled.
|
|
</p>
|
|
<p>The <code class="code">trap</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a
|
|
<code class="code">RETURN</code> pseudo-signal specification, similar to
|
|
<code class="code">EXIT</code> and <code class="code">DEBUG</code>.
|
|
Commands specified with a <code class="code">RETURN</code> trap are executed before
|
|
execution resumes after a shell function or a shell script executed with
|
|
<code class="code">.</code> or <code class="code">source</code> returns.
|
|
The <code class="code">RETURN</code> trap is not inherited by shell functions unless the
|
|
function has been given the <code class="code">trace</code> attribute or the
|
|
<code class="code">functrace</code> option has been enabled using the <code class="code">shopt</code> builtin.
|
|
</p>
|
|
</li><li>The Bash <code class="code">type</code> builtin is more extensive and gives more information
|
|
about the names it finds (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
|
|
</li><li>The <code class="code">ulimit</code> builtin provides control over many more per-process
|
|
resources (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>).
|
|
|
|
</li><li>The Bash <code class="code">umask</code> builtin uses the <samp class="option">-p</samp> option to display
|
|
the output in the form of a <code class="code">umask</code> command
|
|
that may be reused as input (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
</li><li>The Bash <code class="code">wait</code> builtin has a <samp class="option">-n</samp> option to wait for the
|
|
next child to exit, possibly selecting from a list of supplied jobs,
|
|
and the <samp class="option">-p</samp> option to store information about a terminated
|
|
child process in a shell variable.
|
|
|
|
</li><li>The SVR4.2 shell behaves differently when invoked as <code class="code">jsh</code>
|
|
(it turns on job control).
|
|
|
|
</li><li>The SVR4.2 shell has two privilege-related builtins
|
|
(<code class="code">mldmode</code> and <code class="code">priv</code>) not present in Bash.
|
|
|
|
</li><li>Bash does not have the <code class="code">stop</code> or <code class="code">newgrp</code> builtins.
|
|
|
|
</li><li>Bash does not use the <code class="env">SHACCT</code> variable or perform shell accounting.
|
|
|
|
</li><li>The SVR4.2 <code class="code">sh</code> uses a <code class="env">TIMEOUT</code> variable like Bash uses
|
|
<code class="env">TMOUT</code>.
|
|
|
|
</li></ul>
|
|
|
|
<p>More features unique to Bash may be found in <a class="ref" href="#Bash-Features">Bash Features</a>.
|
|
</p>
|
|
<ul class="mini-toc">
|
|
<li><a href="#Implementation-Differences-From-The-SVR4_002e2-Shell" accesskey="1">Implementation Differences From The SVR4.2 Shell</a></li>
|
|
</ul>
|
|
<div class="appendixsec-level-extent" id="Implementation-Differences-From-The-SVR4_002e2-Shell">
|
|
<h3 class="appendixsec"><span>B.1 Implementation Differences From The SVR4.2 Shell<a class="copiable-link" href="#Implementation-Differences-From-The-SVR4_002e2-Shell"> ¶</a></span></h3>
|
|
|
|
<p>Since Bash is a completely new implementation, it does not suffer from
|
|
many of the limitations of the SVR4.2 shell.
|
|
For instance:
|
|
</p>
|
|
<ul class="itemize mark-bullet">
|
|
<li>Bash does not fork a subshell when redirecting into or out of
|
|
a shell control structure such as an <code class="code">if</code> or <code class="code">while</code>
|
|
statement.
|
|
|
|
</li><li>Bash does not allow unbalanced quotes.
|
|
The SVR4.2 shell will silently
|
|
insert a needed closing quote at <code class="code">EOF</code> under certain circumstances.
|
|
This can be the cause of some hard-to-find errors.
|
|
|
|
</li><li>The SVR4.2 shell uses a baroque memory management scheme based on
|
|
trapping <code class="code">SIGSEGV</code>.
|
|
If the shell is started from a process with
|
|
<code class="code">SIGSEGV</code> blocked (e.g., by using the <code class="code">system()</code> C library
|
|
function call), it misbehaves badly.
|
|
|
|
</li><li>In a questionable attempt at security, the SVR4.2 shell,
|
|
when invoked without the <samp class="option">-p</samp> option, will alter its real
|
|
and effective <small class="sc">UID</small> and <small class="sc">GID</small> if they are less than some
|
|
magic threshold value, commonly 100.
|
|
This can lead to unexpected results.
|
|
|
|
</li><li>The SVR4.2 shell does not allow users to trap <code class="code">SIGSEGV</code>,
|
|
<code class="code">SIGALRM</code>, or <code class="code">SIGCHLD</code>.
|
|
|
|
</li><li>The SVR4.2 shell does not allow the <code class="env">IFS</code>, <code class="env">MAILCHECK</code>,
|
|
<code class="env">PATH</code>, <code class="env">PS1</code>, or <code class="env">PS2</code> variables to be unset.
|
|
|
|
</li><li>The SVR4.2 shell treats ‘<samp class="samp">^</samp>’ as the undocumented equivalent of
|
|
‘<samp class="samp">|</samp>’.
|
|
|
|
</li><li>Bash allows multiple option arguments when it is invoked (<code class="code">-x -v</code>);
|
|
the SVR4.2 shell allows only one option argument (<code class="code">-xv</code>).
|
|
In fact, some versions of the shell dump core if the second argument begins
|
|
with a ‘<samp class="samp">-</samp>’.
|
|
|
|
</li><li>The SVR4.2 shell exits a script if any builtin fails; Bash exits
|
|
a script only if one of the <small class="sc">POSIX</small> special builtins fails, and
|
|
only for certain failures, as enumerated in the <small class="sc">POSIX</small> standard.
|
|
|
|
</li><li>If the <code class="code">lastpipe</code> option is enabled, and job control is not active,
|
|
Bash runs the last element of a pipeline in the current shell execution
|
|
environment.
|
|
|
|
</li></ul>
|
|
|
|
<hr>
|
|
</div>
|
|
</div>
|
|
<div class="appendix-level-extent" id="GNU-Free-Documentation-License">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Indexes" accesskey="n" rel="next">Indexes</a>, Previous: <a href="#Major-Differences-From-The-Bourne-Shell" accesskey="p" rel="prev">Major Differences From The Bourne Shell</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="appendix" id="GNU-Free-Documentation-License-1"><span>Appendix C GNU Free Documentation License<a class="copiable-link" href="#GNU-Free-Documentation-License-1"> ¶</a></span></h2>
|
|
|
|
<div class="center">Version 1.3, 3 November 2008
|
|
</div>
|
|
|
|
<div class="display">
|
|
<pre class="display-preformatted">Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
|
|
<a class="uref" href="http://fsf.org/">http://fsf.org/</a>
|
|
|
|
Everyone is permitted to copy and distribute verbatim copies
|
|
of this license document, but changing it is not allowed.
|
|
</pre></div>
|
|
|
|
<ol class="enumerate" start="0">
|
|
<li> PREAMBLE
|
|
|
|
<p>The purpose of this License is to make a manual, textbook, or other
|
|
functional and useful document <em class="dfn">free</em> in the sense of freedom: to
|
|
assure everyone the effective freedom to copy and redistribute it,
|
|
with or without modifying it, either commercially or noncommercially.
|
|
Secondarily, this License preserves for the author and publisher a way
|
|
to get credit for their work, while not being considered responsible
|
|
for modifications made by others.
|
|
</p>
|
|
<p>This License is a kind of “copyleft”, which means that derivative
|
|
works of the document must themselves be free in the same sense. It
|
|
complements the GNU General Public License, which is a copyleft
|
|
license designed for free software.
|
|
</p>
|
|
<p>We have designed this License in order to use it for manuals for free
|
|
software, because free software needs free documentation: a free
|
|
program should come with manuals providing the same freedoms that the
|
|
software does. But this License is not limited to software manuals;
|
|
it can be used for any textual work, regardless of subject matter or
|
|
whether it is published as a printed book. We recommend this License
|
|
principally for works whose purpose is instruction or reference.
|
|
</p>
|
|
</li><li> APPLICABILITY AND DEFINITIONS
|
|
|
|
<p>This License applies to any manual or other work, in any medium, that
|
|
contains a notice placed by the copyright holder saying it can be
|
|
distributed under the terms of this License. Such a notice grants a
|
|
world-wide, royalty-free license, unlimited in duration, to use that
|
|
work under the conditions stated herein. The “Document”, below,
|
|
refers to any such manual or work. Any member of the public is a
|
|
licensee, and is addressed as “you”. You accept the license if you
|
|
copy, modify or distribute the work in a way requiring permission
|
|
under copyright law.
|
|
</p>
|
|
<p>A “Modified Version” of the Document means any work containing the
|
|
Document or a portion of it, either copied verbatim, or with
|
|
modifications and/or translated into another language.
|
|
</p>
|
|
<p>A “Secondary Section” is a named appendix or a front-matter section
|
|
of the Document that deals exclusively with the relationship of the
|
|
publishers or authors of the Document to the Document’s overall
|
|
subject (or to related matters) and contains nothing that could fall
|
|
directly within that overall subject. (Thus, if the Document is in
|
|
part a textbook of mathematics, a Secondary Section may not explain
|
|
any mathematics.) The relationship could be a matter of historical
|
|
connection with the subject or with related matters, or of legal,
|
|
commercial, philosophical, ethical or political position regarding
|
|
them.
|
|
</p>
|
|
<p>The “Invariant Sections” are certain Secondary Sections whose titles
|
|
are designated, as being those of Invariant Sections, in the notice
|
|
that says that the Document is released under this License. If a
|
|
section does not fit the above definition of Secondary then it is not
|
|
allowed to be designated as Invariant. The Document may contain zero
|
|
Invariant Sections. If the Document does not identify any Invariant
|
|
Sections then there are none.
|
|
</p>
|
|
<p>The “Cover Texts” are certain short passages of text that are listed,
|
|
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
|
|
the Document is released under this License. A Front-Cover Text may
|
|
be at most 5 words, and a Back-Cover Text may be at most 25 words.
|
|
</p>
|
|
<p>A “Transparent” copy of the Document means a machine-readable copy,
|
|
represented in a format whose specification is available to the
|
|
general public, that is suitable for revising the document
|
|
straightforwardly with generic text editors or (for images composed of
|
|
pixels) generic paint programs or (for drawings) some widely available
|
|
drawing editor, and that is suitable for input to text formatters or
|
|
for automatic translation to a variety of formats suitable for input
|
|
to text formatters. A copy made in an otherwise Transparent file
|
|
format whose markup, or absence of markup, has been arranged to thwart
|
|
or discourage subsequent modification by readers is not Transparent.
|
|
An image format is not Transparent if used for any substantial amount
|
|
of text. A copy that is not “Transparent” is called “Opaque”.
|
|
</p>
|
|
<p>Examples of suitable formats for Transparent copies include plain
|
|
<small class="sc">ASCII</small> without markup, Texinfo input format, LaTeX input
|
|
format, <abbr class="acronym">SGML</abbr> or <abbr class="acronym">XML</abbr> using a publicly available
|
|
<abbr class="acronym">DTD</abbr>, and standard-conforming simple <abbr class="acronym">HTML</abbr>,
|
|
PostScript or <abbr class="acronym">PDF</abbr> designed for human modification. Examples
|
|
of transparent image formats include <abbr class="acronym">PNG</abbr>, <abbr class="acronym">XCF</abbr> and
|
|
<abbr class="acronym">JPG</abbr>. Opaque formats include proprietary formats that can be
|
|
read and edited only by proprietary word processors, <abbr class="acronym">SGML</abbr> or
|
|
<abbr class="acronym">XML</abbr> for which the <abbr class="acronym">DTD</abbr> and/or processing tools are
|
|
not generally available, and the machine-generated <abbr class="acronym">HTML</abbr>,
|
|
PostScript or <abbr class="acronym">PDF</abbr> produced by some word processors for
|
|
output purposes only.
|
|
</p>
|
|
<p>The “Title Page” means, for a printed book, the title page itself,
|
|
plus such following pages as are needed to hold, legibly, the material
|
|
this License requires to appear in the title page. For works in
|
|
formats which do not have any title page as such, “Title Page” means
|
|
the text near the most prominent appearance of the work’s title,
|
|
preceding the beginning of the body of the text.
|
|
</p>
|
|
<p>The “publisher” means any person or entity that distributes copies
|
|
of the Document to the public.
|
|
</p>
|
|
<p>A section “Entitled XYZ” means a named subunit of the Document whose
|
|
title either is precisely XYZ or contains XYZ in parentheses following
|
|
text that translates XYZ in another language. (Here XYZ stands for a
|
|
specific section name mentioned below, such as “Acknowledgements”,
|
|
“Dedications”, “Endorsements”, or “History”.) To “Preserve the Title”
|
|
of such a section when you modify the Document means that it remains a
|
|
section “Entitled XYZ” according to this definition.
|
|
</p>
|
|
<p>The Document may include Warranty Disclaimers next to the notice which
|
|
states that this License applies to the Document. These Warranty
|
|
Disclaimers are considered to be included by reference in this
|
|
License, but only as regards disclaiming warranties: any other
|
|
implication that these Warranty Disclaimers may have is void and has
|
|
no effect on the meaning of this License.
|
|
</p>
|
|
</li><li> VERBATIM COPYING
|
|
|
|
<p>You may copy and distribute the Document in any medium, either
|
|
commercially or noncommercially, provided that this License, the
|
|
copyright notices, and the license notice saying this License applies
|
|
to the Document are reproduced in all copies, and that you add no other
|
|
conditions whatsoever to those of this License. You may not use
|
|
technical measures to obstruct or control the reading or further
|
|
copying of the copies you make or distribute. However, you may accept
|
|
compensation in exchange for copies. If you distribute a large enough
|
|
number of copies you must also follow the conditions in section 3.
|
|
</p>
|
|
<p>You may also lend copies, under the same conditions stated above, and
|
|
you may publicly display copies.
|
|
</p>
|
|
</li><li> COPYING IN QUANTITY
|
|
|
|
<p>If you publish printed copies (or copies in media that commonly have
|
|
printed covers) of the Document, numbering more than 100, and the
|
|
Document’s license notice requires Cover Texts, you must enclose the
|
|
copies in covers that carry, clearly and legibly, all these Cover
|
|
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
|
|
the back cover. Both covers must also clearly and legibly identify
|
|
you as the publisher of these copies. The front cover must present
|
|
the full title with all words of the title equally prominent and
|
|
visible. You may add other material on the covers in addition.
|
|
Copying with changes limited to the covers, as long as they preserve
|
|
the title of the Document and satisfy these conditions, can be treated
|
|
as verbatim copying in other respects.
|
|
</p>
|
|
<p>If the required texts for either cover are too voluminous to fit
|
|
legibly, you should put the first ones listed (as many as fit
|
|
reasonably) on the actual cover, and continue the rest onto adjacent
|
|
pages.
|
|
</p>
|
|
<p>If you publish or distribute Opaque copies of the Document numbering
|
|
more than 100, you must either include a machine-readable Transparent
|
|
copy along with each Opaque copy, or state in or with each Opaque copy
|
|
a computer-network location from which the general network-using
|
|
public has access to download using public-standard network protocols
|
|
a complete Transparent copy of the Document, free of added material.
|
|
If you use the latter option, you must take reasonably prudent steps,
|
|
when you begin distribution of Opaque copies in quantity, to ensure
|
|
that this Transparent copy will remain thus accessible at the stated
|
|
location until at least one year after the last time you distribute an
|
|
Opaque copy (directly or through your agents or retailers) of that
|
|
edition to the public.
|
|
</p>
|
|
<p>It is requested, but not required, that you contact the authors of the
|
|
Document well before redistributing any large number of copies, to give
|
|
them a chance to provide you with an updated version of the Document.
|
|
</p>
|
|
</li><li> MODIFICATIONS
|
|
|
|
<p>You may copy and distribute a Modified Version of the Document under
|
|
the conditions of sections 2 and 3 above, provided that you release
|
|
the Modified Version under precisely this License, with the Modified
|
|
Version filling the role of the Document, thus licensing distribution
|
|
and modification of the Modified Version to whoever possesses a copy
|
|
of it. In addition, you must do these things in the Modified Version:
|
|
</p>
|
|
<ol class="enumerate" type="A" start="1">
|
|
<li> Use in the Title Page (and on the covers, if any) a title distinct
|
|
from that of the Document, and from those of previous versions
|
|
(which should, if there were any, be listed in the History section
|
|
of the Document). You may use the same title as a previous version
|
|
if the original publisher of that version gives permission.
|
|
|
|
</li><li> List on the Title Page, as authors, one or more persons or entities
|
|
responsible for authorship of the modifications in the Modified
|
|
Version, together with at least five of the principal authors of the
|
|
Document (all of its principal authors, if it has fewer than five),
|
|
unless they release you from this requirement.
|
|
|
|
</li><li> State on the Title page the name of the publisher of the
|
|
Modified Version, as the publisher.
|
|
|
|
</li><li> Preserve all the copyright notices of the Document.
|
|
|
|
</li><li> Add an appropriate copyright notice for your modifications
|
|
adjacent to the other copyright notices.
|
|
|
|
</li><li> Include, immediately after the copyright notices, a license notice
|
|
giving the public permission to use the Modified Version under the
|
|
terms of this License, in the form shown in the Addendum below.
|
|
|
|
</li><li> Preserve in that license notice the full lists of Invariant Sections
|
|
and required Cover Texts given in the Document’s license notice.
|
|
|
|
</li><li> Include an unaltered copy of this License.
|
|
|
|
</li><li> Preserve the section Entitled “History”, Preserve its Title, and add
|
|
to it an item stating at least the title, year, new authors, and
|
|
publisher of the Modified Version as given on the Title Page. If
|
|
there is no section Entitled “History” in the Document, create one
|
|
stating the title, year, authors, and publisher of the Document as
|
|
given on its Title Page, then add an item describing the Modified
|
|
Version as stated in the previous sentence.
|
|
|
|
</li><li> Preserve the network location, if any, given in the Document for
|
|
public access to a Transparent copy of the Document, and likewise
|
|
the network locations given in the Document for previous versions
|
|
it was based on. These may be placed in the “History” section.
|
|
You may omit a network location for a work that was published at
|
|
least four years before the Document itself, or if the original
|
|
publisher of the version it refers to gives permission.
|
|
|
|
</li><li> For any section Entitled “Acknowledgements” or “Dedications”, Preserve
|
|
the Title of the section, and preserve in the section all the
|
|
substance and tone of each of the contributor acknowledgements and/or
|
|
dedications given therein.
|
|
|
|
</li><li> Preserve all the Invariant Sections of the Document,
|
|
unaltered in their text and in their titles. Section numbers
|
|
or the equivalent are not considered part of the section titles.
|
|
|
|
</li><li> Delete any section Entitled “Endorsements”. Such a section
|
|
may not be included in the Modified Version.
|
|
|
|
</li><li> Do not retitle any existing section to be Entitled “Endorsements” or
|
|
to conflict in title with any Invariant Section.
|
|
|
|
</li><li> Preserve any Warranty Disclaimers.
|
|
</li></ol>
|
|
|
|
<p>If the Modified Version includes new front-matter sections or
|
|
appendices that qualify as Secondary Sections and contain no material
|
|
copied from the Document, you may at your option designate some or all
|
|
of these sections as invariant. To do this, add their titles to the
|
|
list of Invariant Sections in the Modified Version’s license notice.
|
|
These titles must be distinct from any other section titles.
|
|
</p>
|
|
<p>You may add a section Entitled “Endorsements”, provided it contains
|
|
nothing but endorsements of your Modified Version by various
|
|
parties—for example, statements of peer review or that the text has
|
|
been approved by an organization as the authoritative definition of a
|
|
standard.
|
|
</p>
|
|
<p>You may add a passage of up to five words as a Front-Cover Text, and a
|
|
passage of up to 25 words as a Back-Cover Text, to the end of the list
|
|
of Cover Texts in the Modified Version. Only one passage of
|
|
Front-Cover Text and one of Back-Cover Text may be added by (or
|
|
through arrangements made by) any one entity. If the Document already
|
|
includes a cover text for the same cover, previously added by you or
|
|
by arrangement made by the same entity you are acting on behalf of,
|
|
you may not add another; but you may replace the old one, on explicit
|
|
permission from the previous publisher that added the old one.
|
|
</p>
|
|
<p>The author(s) and publisher(s) of the Document do not by this License
|
|
give permission to use their names for publicity for or to assert or
|
|
imply endorsement of any Modified Version.
|
|
</p>
|
|
</li><li> COMBINING DOCUMENTS
|
|
|
|
<p>You may combine the Document with other documents released under this
|
|
License, under the terms defined in section 4 above for modified
|
|
versions, provided that you include in the combination all of the
|
|
Invariant Sections of all of the original documents, unmodified, and
|
|
list them all as Invariant Sections of your combined work in its
|
|
license notice, and that you preserve all their Warranty Disclaimers.
|
|
</p>
|
|
<p>The combined work need only contain one copy of this License, and
|
|
multiple identical Invariant Sections may be replaced with a single
|
|
copy. If there are multiple Invariant Sections with the same name but
|
|
different contents, make the title of each such section unique by
|
|
adding at the end of it, in parentheses, the name of the original
|
|
author or publisher of that section if known, or else a unique number.
|
|
Make the same adjustment to the section titles in the list of
|
|
Invariant Sections in the license notice of the combined work.
|
|
</p>
|
|
<p>In the combination, you must combine any sections Entitled “History”
|
|
in the various original documents, forming one section Entitled
|
|
“History”; likewise combine any sections Entitled “Acknowledgements”,
|
|
and any sections Entitled “Dedications”. You must delete all
|
|
sections Entitled “Endorsements.”
|
|
</p>
|
|
</li><li> COLLECTIONS OF DOCUMENTS
|
|
|
|
<p>You may make a collection consisting of the Document and other documents
|
|
released under this License, and replace the individual copies of this
|
|
License in the various documents with a single copy that is included in
|
|
the collection, provided that you follow the rules of this License for
|
|
verbatim copying of each of the documents in all other respects.
|
|
</p>
|
|
<p>You may extract a single document from such a collection, and distribute
|
|
it individually under this License, provided you insert a copy of this
|
|
License into the extracted document, and follow this License in all
|
|
other respects regarding verbatim copying of that document.
|
|
</p>
|
|
</li><li> AGGREGATION WITH INDEPENDENT WORKS
|
|
|
|
<p>A compilation of the Document or its derivatives with other separate
|
|
and independent documents or works, in or on a volume of a storage or
|
|
distribution medium, is called an “aggregate” if the copyright
|
|
resulting from the compilation is not used to limit the legal rights
|
|
of the compilation’s users beyond what the individual works permit.
|
|
When the Document is included in an aggregate, this License does not
|
|
apply to the other works in the aggregate which are not themselves
|
|
derivative works of the Document.
|
|
</p>
|
|
<p>If the Cover Text requirement of section 3 is applicable to these
|
|
copies of the Document, then if the Document is less than one half of
|
|
the entire aggregate, the Document’s Cover Texts may be placed on
|
|
covers that bracket the Document within the aggregate, or the
|
|
electronic equivalent of covers if the Document is in electronic form.
|
|
Otherwise they must appear on printed covers that bracket the whole
|
|
aggregate.
|
|
</p>
|
|
</li><li> TRANSLATION
|
|
|
|
<p>Translation is considered a kind of modification, so you may
|
|
distribute translations of the Document under the terms of section 4.
|
|
Replacing Invariant Sections with translations requires special
|
|
permission from their copyright holders, but you may include
|
|
translations of some or all Invariant Sections in addition to the
|
|
original versions of these Invariant Sections. You may include a
|
|
translation of this License, and all the license notices in the
|
|
Document, and any Warranty Disclaimers, provided that you also include
|
|
the original English version of this License and the original versions
|
|
of those notices and disclaimers. In case of a disagreement between
|
|
the translation and the original version of this License or a notice
|
|
or disclaimer, the original version will prevail.
|
|
</p>
|
|
<p>If a section in the Document is Entitled “Acknowledgements”,
|
|
“Dedications”, or “History”, the requirement (section 4) to Preserve
|
|
its Title (section 1) will typically require changing the actual
|
|
title.
|
|
</p>
|
|
</li><li> TERMINATION
|
|
|
|
<p>You may not copy, modify, sublicense, or distribute the Document
|
|
except as expressly provided under this License. Any attempt
|
|
otherwise to copy, modify, sublicense, or distribute it is void, and
|
|
will automatically terminate your rights under this License.
|
|
</p>
|
|
<p>However, if you cease all violation of this License, then your license
|
|
from a particular copyright holder is reinstated (a) provisionally,
|
|
unless and until the copyright holder explicitly and finally
|
|
terminates your license, and (b) permanently, if the copyright holder
|
|
fails to notify you of the violation by some reasonable means prior to
|
|
60 days after the cessation.
|
|
</p>
|
|
<p>Moreover, your license from a particular copyright holder is
|
|
reinstated permanently if the copyright holder notifies you of the
|
|
violation by some reasonable means, this is the first time you have
|
|
received notice of violation of this License (for any work) from that
|
|
copyright holder, and you cure the violation prior to 30 days after
|
|
your receipt of the notice.
|
|
</p>
|
|
<p>Termination of your rights under this section does not terminate the
|
|
licenses of parties who have received copies or rights from you under
|
|
this License. If your rights have been terminated and not permanently
|
|
reinstated, receipt of a copy of some or all of the same material does
|
|
not give you any rights to use it.
|
|
</p>
|
|
</li><li> FUTURE REVISIONS OF THIS LICENSE
|
|
|
|
<p>The Free Software Foundation may publish new, revised versions
|
|
of the GNU Free Documentation License from time to time. Such new
|
|
versions will be similar in spirit to the present version, but may
|
|
differ in detail to address new problems or concerns. See
|
|
<a class="uref" href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
|
|
</p>
|
|
<p>Each version of the License is given a distinguishing version number.
|
|
If the Document specifies that a particular numbered version of this
|
|
License “or any later version” applies to it, you have the option of
|
|
following the terms and conditions either of that specified version or
|
|
of any later version that has been published (not as a draft) by the
|
|
Free Software Foundation. If the Document does not specify a version
|
|
number of this License, you may choose any version ever published (not
|
|
as a draft) by the Free Software Foundation. If the Document
|
|
specifies that a proxy can decide which future versions of this
|
|
License can be used, that proxy’s public statement of acceptance of a
|
|
version permanently authorizes you to choose that version for the
|
|
Document.
|
|
</p>
|
|
</li><li> RELICENSING
|
|
|
|
<p>“Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
|
|
World Wide Web server that publishes copyrightable works and also
|
|
provides prominent facilities for anybody to edit those works. A
|
|
public wiki that anybody can edit is an example of such a server. A
|
|
“Massive Multiauthor Collaboration” (or “MMC”) contained in the
|
|
site means any set of copyrightable works thus published on the MMC
|
|
site.
|
|
</p>
|
|
<p>“CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
|
|
license published by Creative Commons Corporation, a not-for-profit
|
|
corporation with a principal place of business in San Francisco,
|
|
California, as well as future copyleft versions of that license
|
|
published by that same organization.
|
|
</p>
|
|
<p>“Incorporate” means to publish or republish a Document, in whole or
|
|
in part, as part of another Document.
|
|
</p>
|
|
<p>An MMC is “eligible for relicensing” if it is licensed under this
|
|
License, and if all works that were first published under this License
|
|
somewhere other than this MMC, and subsequently incorporated in whole
|
|
or in part into the MMC, (1) had no cover texts or invariant sections,
|
|
and (2) were thus incorporated prior to November 1, 2008.
|
|
</p>
|
|
<p>The operator of an MMC Site may republish an MMC contained in the site
|
|
under CC-BY-SA on the same site at any time before August 1, 2009,
|
|
provided the MMC is eligible for relicensing.
|
|
</p>
|
|
</li></ol>
|
|
|
|
<h3 class="heading" id="ADDENDUM_003a-How-to-use-this-License-for-your-documents"><span>ADDENDUM: How to use this License for your documents<a class="copiable-link" href="#ADDENDUM_003a-How-to-use-this-License-for-your-documents"> ¶</a></span></h3>
|
|
|
|
<p>To use this License in a document you have written, include a copy of
|
|
the License in the document and put the following copyright and
|
|
license notices just after the title page:
|
|
</p>
|
|
<div class="example smallexample">
|
|
<div class="group"><pre class="example-preformatted"> Copyright (C) <var class="var">year</var> <var class="var">your name</var>.
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
under the terms of the GNU Free Documentation License, Version 1.3
|
|
or any later version published by the Free Software Foundation;
|
|
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
|
Texts. A copy of the license is included in the section entitled ``GNU
|
|
Free Documentation License''.
|
|
</pre></div></div>
|
|
|
|
<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
|
replace the “with…Texts.” line with this:
|
|
</p>
|
|
<div class="example smallexample">
|
|
<div class="group"><pre class="example-preformatted"> with the Invariant Sections being <var class="var">list their titles</var>, with
|
|
the Front-Cover Texts being <var class="var">list</var>, and with the Back-Cover Texts
|
|
being <var class="var">list</var>.
|
|
</pre></div></div>
|
|
|
|
<p>If you have Invariant Sections without Cover Texts, or some other
|
|
combination of the three, merge those two alternatives to suit the
|
|
situation.
|
|
</p>
|
|
<p>If your document contains nontrivial examples of program code, we
|
|
recommend releasing these examples in parallel under your choice of
|
|
free software license, such as the GNU General Public License,
|
|
to permit their use in free software.
|
|
</p>
|
|
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="appendix-level-extent" id="Indexes">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#GNU-Free-Documentation-License" accesskey="p" rel="prev">GNU Free Documentation License</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h2 class="appendix" id="Indexes-1"><span>Appendix D Indexes<a class="copiable-link" href="#Indexes-1"> ¶</a></span></h2>
|
|
|
|
|
|
<ul class="mini-toc">
|
|
<li><a href="#Builtin-Index" accesskey="1">Index of Shell Builtin Commands</a></li>
|
|
<li><a href="#Reserved-Word-Index" accesskey="2">Index of Shell Reserved Words</a></li>
|
|
<li><a href="#Variable-Index" accesskey="3">Parameter and Variable Index</a></li>
|
|
<li><a href="#Function-Index" accesskey="4">Function Index</a></li>
|
|
<li><a href="#Concept-Index" accesskey="5">Concept Index</a></li>
|
|
</ul>
|
|
<hr>
|
|
<div class="appendixsec-level-extent" id="Builtin-Index">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Reserved-Word-Index" accesskey="n" rel="next">Index of Shell Reserved Words</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="appendixsec" id="Index-of-Shell-Builtin-Commands"><span>D.1 Index of Shell Builtin Commands<a class="copiable-link" href="#Index-of-Shell-Builtin-Commands"> ¶</a></span></h3>
|
|
<div class="printindex bt-printindex">
|
|
<table class="bt-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-1"><b>:</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-2"><b>.</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-3"><b>[</b></a>
|
|
|
|
<br>
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-G"><b>G</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-J"><b>J</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-L"><b>L</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-W"><b>W</b></a>
|
|
|
|
</td></tr></table>
|
|
<table class="bt-entries-printindex">
|
|
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_symbol-1">:</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_003a"><code>:</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_symbol-2">.</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_002e"><code>.</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_symbol-3">[</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_005b"><code>[</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-A">A</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-alias"><code>alias</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-B">B</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-bg"><code>bg</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-bind"><code>bind</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-break"><code>break</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-builtin"><code>builtin</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-C">C</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-caller"><code>caller</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-cd"><code>cd</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command"><code>command</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-compgen"><code>compgen</code></a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete"><code>complete</code></a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-compopt"><code>compopt</code></a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-continue"><code>continue</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-D">D</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-declare"><code>declare</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-dirs"><code>dirs</code></a></td><td class="printindex-index-section"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-disown"><code>disown</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-E">E</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-echo"><code>echo</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-enable"><code>enable</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-eval"><code>eval</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-exec"><code>exec</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-exit"><code>exit</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-export"><code>export</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-F">F</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-false"><code>false</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-fc"><code>fc</code></a></td><td class="printindex-index-section"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-fg"><code>fg</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-G">G</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-getopts"><code>getopts</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-H">H</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-hash"><code>hash</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-help"><code>help</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history"><code>history</code></a></td><td class="printindex-index-section"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-J">J</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-jobs"><code>jobs</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-K">K</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-kill"><code>kill</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-L">L</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-let"><code>let</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-local"><code>local</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-logout"><code>logout</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-M">M</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-mapfile"><code>mapfile</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-P">P</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-popd"><code>popd</code></a></td><td class="printindex-index-section"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-printf"><code>printf</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-pushd"><code>pushd</code></a></td><td class="printindex-index-section"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-pwd"><code>pwd</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-R">R</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-read"><code>read</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-readarray"><code>readarray</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-readonly"><code>readonly</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-return"><code>return</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-S">S</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-set"><code>set</code></a></td><td class="printindex-index-section"><a href="#The-Set-Builtin">The Set Builtin</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shift"><code>shift</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shopt"><code>shopt</code></a></td><td class="printindex-index-section"><a href="#The-Shopt-Builtin">The Shopt Builtin</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-source"><code>source</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-suspend"><code>suspend</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-T">T</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-test"><code>test</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-times"><code>times</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-trap"><code>trap</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-true"><code>true</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-type"><code>type</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-typeset"><code>typeset</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-U">U</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-ulimit"><code>ulimit</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-umask"><code>umask</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-unalias"><code>unalias</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-unset"><code>unset</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Builtin-Index_bt_letter-W">W</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-wait"><code>wait</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
</table>
|
|
<table class="bt-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-1"><b>:</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-2"><b>.</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-3"><b>[</b></a>
|
|
|
|
<br>
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-G"><b>G</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-J"><b>J</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-L"><b>L</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-W"><b>W</b></a>
|
|
|
|
</td></tr></table>
|
|
</div>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="appendixsec-level-extent" id="Reserved-Word-Index">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Variable-Index" accesskey="n" rel="next">Parameter and Variable Index</a>, Previous: <a href="#Builtin-Index" accesskey="p" rel="prev">Index of Shell Builtin Commands</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="appendixsec" id="Index-of-Shell-Reserved-Words"><span>D.2 Index of Shell Reserved Words<a class="copiable-link" href="#Index-of-Shell-Reserved-Words"> ¶</a></span></h3>
|
|
<div class="printindex rw-printindex">
|
|
<table class="rw-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a>
|
|
|
|
<br>
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a>
|
|
|
|
</td></tr></table>
|
|
<table class="rw-entries-printindex">
|
|
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_symbol-1">!</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0021"><code>!</code></a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_symbol-2">[</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_005b_005b"><code>[[</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_symbol-3">]</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_005d_005d"><code>]]</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_symbol-4">{</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_007b"><code>{</code></a></td><td class="printindex-index-section"><a href="#Command-Grouping">Command Grouping</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_symbol-5">}</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_007d"><code>}</code></a></td><td class="printindex-index-section"><a href="#Command-Grouping">Command Grouping</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-C">C</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-case"><code>case</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-D">D</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-do"><code>do</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-done"><code>done</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-E">E</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-elif"><code>elif</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-else"><code>else</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-esac"><code>esac</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-F">F</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-fi"><code>fi</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-for"><code>for</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-function"><code>function</code></a></td><td class="printindex-index-section"><a href="#Shell-Functions">Shell Functions</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-I">I</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-if"><code>if</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-in"><code>in</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-S">S</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-select"><code>select</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-T">T</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-then"><code>then</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-time"><code>time</code></a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-U">U</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-until"><code>until</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Reserved-Word-Index_rw_letter-W">W</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-while"><code>while</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
</table>
|
|
<table class="rw-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a>
|
|
|
|
<br>
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a>
|
|
|
|
</td></tr></table>
|
|
</div>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="appendixsec-level-extent" id="Variable-Index">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Previous: <a href="#Reserved-Word-Index" accesskey="p" rel="prev">Index of Shell Reserved Words</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="appendixsec" id="Parameter-and-Variable-Index"><span>D.3 Parameter and Variable Index<a class="copiable-link" href="#Parameter-and-Variable-Index"> ¶</a></span></h3>
|
|
<div class="printindex vr-printindex">
|
|
<table class="vr-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-1"><b>_</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-2"><b>-</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-3"><b>!</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-4"><b>?</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-5"><b>@</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-6"><b>*</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-7"><b>#</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-8"><b>$</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-9"><b>0</b></a>
|
|
|
|
<br>
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-G"><b>G</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-L"><b>L</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-O"><b>O</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-V"><b>V</b></a>
|
|
|
|
</td></tr></table>
|
|
<table class="vr-entries-printindex">
|
|
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-1">_</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_005f"><code>_</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-2">-</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_002d"><code>-</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-3">!</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0021-1"><code>!</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-4">?</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_003f"><code>?</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-5">@</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0040"><code>@</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-6">*</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_002a"><code>*</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-7">#</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0023"><code>#</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-8">$</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024"><code>$</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_005f"><code>$_</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_002d"><code>$-</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0021"><code>$!</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_003f"><code>$?</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0040"><code>$@</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_002a"><code>$*</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0023"><code>$#</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0024"><code>$$</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-_00240"><code>$0</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_symbol-9">0</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-0"><code>0</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-A">A</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-active_002dregion_002dend_002dcolor"><code>active-region-end-color</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-active_002dregion_002dstart_002dcolor"><code>active-region-start-color</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-auto_005fresume"><code>auto_resume</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-B">B</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH"><code>BASH</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fALIASES"><code>BASH_ALIASES</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fARGC"><code>BASH_ARGC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fARGV"><code>BASH_ARGV</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fARGV0"><code>BASH_ARGV0</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fCMDS"><code>BASH_CMDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fCOMMAND"><code>BASH_COMMAND</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fCOMPAT"><code>BASH_COMPAT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fENV"><code>BASH_ENV</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fEXECUTION_005fSTRING"><code>BASH_EXECUTION_STRING</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fLINENO"><code>BASH_LINENO</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fLOADABLES_005fPATH"><code>BASH_LOADABLES_PATH</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fMONOSECONDS"><code>BASH_MONOSECONDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fREMATCH"><code>BASH_REMATCH</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fSOURCE"><code>BASH_SOURCE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fSUBSHELL"><code>BASH_SUBSHELL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fTRAPSIG"><code>BASH_TRAPSIG</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fVERSINFO"><code>BASH_VERSINFO</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fVERSION"><code>BASH_VERSION</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fXTRACEFD"><code>BASH_XTRACEFD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASHOPTS"><code>BASHOPTS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-BASHPID"><code>BASHPID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-bell_002dstyle"><code>bell-style</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-bind_002dtty_002dspecial_002dchars"><code>bind-tty-special-chars</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-blink_002dmatching_002dparen"><code>blink-matching-paren</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-C">C</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-CDPATH"><code>CDPATH</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-CHILD_005fMAX"><code>CHILD_MAX</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-colored_002dcompletion_002dprefix"><code>colored-completion-prefix</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-colored_002dstats"><code>colored-stats</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COLUMNS"><code>COLUMNS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-comment_002dbegin"><code>comment-begin</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fCWORD"><code>COMP_CWORD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fKEY"><code>COMP_KEY</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fLINE"><code>COMP_LINE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fPOINT"><code>COMP_POINT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fTYPE"><code>COMP_TYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fWORDBREAKS"><code>COMP_WORDBREAKS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fWORDS"><code>COMP_WORDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002ddisplay_002dwidth"><code>completion-display-width</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dignore_002dcase"><code>completion-ignore-case</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dmap_002dcase"><code>completion-map-case</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dprefix_002ddisplay_002dlength"><code>completion-prefix-display-length</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dquery_002ditems"><code>completion-query-items</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COMPREPLY"><code>COMPREPLY</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-convert_002dmeta"><code>convert-meta</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-COPROC"><code>COPROC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-D">D</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-DIRSTACK"><code>DIRSTACK</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-disable_002dcompletion"><code>disable-completion</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-E">E</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-echo_002dcontrol_002dcharacters"><code>echo-control-characters</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-editing_002dmode"><code>editing-mode</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-EMACS"><code>EMACS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-emacs_002dmode_002dstring"><code>emacs-mode-string</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-enable_002dactive_002dregion-The"><code>enable-active-region The</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-enable_002dbracketed_002dpaste"><code>enable-bracketed-paste</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-enable_002dkeypad"><code>enable-keypad</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-enable_002dmeta_002dkey"><code>enable-meta-key</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-ENV"><code>ENV</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-EPOCHREALTIME"><code>EPOCHREALTIME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-EPOCHSECONDS"><code>EPOCHSECONDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-EUID"><code>EUID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-EXECIGNORE"><code>EXECIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expand_002dtilde"><code>expand-tilde</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-F">F</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-FCEDIT"><code>FCEDIT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-FIGNORE"><code>FIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-force_002dmeta_002dprefix"><code>force-meta-prefix</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-FUNCNAME"><code>FUNCNAME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-FUNCNEST"><code>FUNCNEST</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-G">G</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-GLOBIGNORE"><code>GLOBIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-GLOBSORT"><code>GLOBSORT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-GROUPS"><code>GROUPS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-H">H</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-histchars"><code>histchars</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTCMD"><code>HISTCMD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTCONTROL"><code>HISTCONTROL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTFILE"><code>HISTFILE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTFILESIZE"><code>HISTFILESIZE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTIGNORE"><code>HISTIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dpreserve_002dpoint"><code>history-preserve-point</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsize"><code>history-size</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTSIZE"><code>HISTSIZE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTTIMEFORMAT"><code>HISTTIMEFORMAT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HOME"><code>HOME</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-horizontal_002dscroll_002dmode"><code>horizontal-scroll-mode</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HOSTFILE"><code>HOSTFILE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HOSTNAME"><code>HOSTNAME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-HOSTTYPE"><code>HOSTTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-I">I</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-IFS"><code>IFS</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-IGNOREEOF"><code>IGNOREEOF</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-input_002dmeta"><code>input-meta</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-INPUTRC"><code>INPUTRC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-INSIDE_005fEMACS"><code>INSIDE_EMACS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-isearch_002dterminators"><code>isearch-terminators</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-K">K</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-keymap"><code>keymap</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-L">L</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LANG"><code>LANG</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LANG-1"><code>LANG</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fALL"><code>LC_ALL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fCOLLATE"><code>LC_COLLATE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fCTYPE"><code>LC_CTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fMESSAGES"><code>LC_MESSAGES</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fMESSAGES-1"><code>LC_MESSAGES</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fNUMERIC"><code>LC_NUMERIC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fTIME"><code>LC_TIME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LINENO"><code>LINENO</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-LINES"><code>LINES</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-M">M</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-MACHTYPE"><code>MACHTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-MAIL"><code>MAIL</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-MAILCHECK"><code>MAILCHECK</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-MAILPATH"><code>MAILPATH</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-MAPFILE"><code>MAPFILE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-mark_002dmodified_002dlines"><code>mark-modified-lines</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-mark_002dsymlinked_002ddirectories"><code>mark-symlinked-directories</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-match_002dhidden_002dfiles"><code>match-hidden-files</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-menu_002dcomplete_002ddisplay_002dprefix"><code>menu-complete-display-prefix</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-meta_002dflag"><code>meta-flag</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-O">O</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-OLDPWD"><code>OLDPWD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-OPTARG"><code>OPTARG</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-OPTERR"><code>OPTERR</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-OPTIND"><code>OPTIND</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-OSTYPE"><code>OSTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-output_002dmeta"><code>output-meta</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-P">P</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-page_002dcompletions"><code>page-completions</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PATH"><code>PATH</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PIPESTATUS"><code>PIPESTATUS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIXLY_005fCORRECT"><code>POSIXLY_CORRECT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PPID"><code>PPID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PROMPT_005fCOMMAND"><code>PROMPT_COMMAND</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PROMPT_005fDIRTRIM"><code>PROMPT_DIRTRIM</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PS0"><code>PS0</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PS1"><code>PS1</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PS2"><code>PS2</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PS3"><code>PS3</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PS4"><code>PS4</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-PWD"><code>PWD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-R">R</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-RANDOM"><code>RANDOM</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fARGUMENT"><code>READLINE_ARGUMENT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fLINE"><code>READLINE_LINE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fMARK"><code>READLINE_MARK</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fPOINT"><code>READLINE_POINT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-REPLY"><code>REPLY</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-revert_002dall_002dat_002dnewline"><code>revert-all-at-newline</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-S">S</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-search_002dignore_002dcase"><code>search-ignore-case</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-SECONDS"><code>SECONDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-SHELL"><code>SHELL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-SHELLOPTS"><code>SHELLOPTS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-SHLVL"><code>SHLVL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-show_002dall_002dif_002dambiguous"><code>show-all-if-ambiguous</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-show_002dall_002dif_002dunmodified"><code>show-all-if-unmodified</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-show_002dmode_002din_002dprompt"><code>show-mode-in-prompt</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-skip_002dcompleted_002dtext"><code>skip-completed-text</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-SRANDOM"><code>SRANDOM</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-T">T</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-TEXTDOMAIN"><code>TEXTDOMAIN</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-TEXTDOMAINDIR"><code>TEXTDOMAINDIR</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-TIMEFORMAT"><code>TIMEFORMAT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-TMOUT"><code>TMOUT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-TMPDIR"><code>TMPDIR</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-U">U</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-UID"><code>UID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Variable-Index_vr_letter-V">V</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-vi_002dcmd_002dmode_002dstring"><code>vi-cmd-mode-string</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-vi_002dins_002dmode_002dstring"><code>vi-ins-mode-string</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-visible_002dstats"><code>visible-stats</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
</table>
|
|
<table class="vr-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-1"><b>_</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-2"><b>-</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-3"><b>!</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-4"><b>?</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-5"><b>@</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-6"><b>*</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-7"><b>#</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-8"><b>$</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-9"><b>0</b></a>
|
|
|
|
<br>
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-G"><b>G</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-L"><b>L</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-O"><b>O</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-V"><b>V</b></a>
|
|
|
|
</td></tr></table>
|
|
</div>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="appendixsec-level-extent" id="Function-Index">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previous: <a href="#Variable-Index" accesskey="p" rel="prev">Parameter and Variable Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="appendixsec" id="Function-Index-1"><span>D.4 Function Index<a class="copiable-link" href="#Function-Index-1"> ¶</a></span></h3>
|
|
<div class="printindex fn-printindex">
|
|
<table class="fn-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Function-Index_fn_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-G"><b>G</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-N"><b>N</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-O"><b>O</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Q"><b>Q</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Y"><b>Y</b></a>
|
|
|
|
</td></tr></table>
|
|
<table class="fn-entries-printindex">
|
|
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-A">A</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-abort-_0028C_002dg_0029"><code>abort (C-g)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-accept_002dline-_0028Newline-or-Return_0029"><code>accept-line (Newline or Return)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-alias_002dexpand_002dline-_0028_0029"><code>alias-expand-line ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-B">B</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dchar-_0028C_002db_0029"><code>backward-char (C-b)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002ddelete_002dchar-_0028Rubout_0029"><code>backward-delete-char (Rubout)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"><code>backward-kill-line (C-x Rubout)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dkill_002dword-_0028M_002dDEL_0029"><code>backward-kill-word (M-<kbd class="key">DEL</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dword-_0028M_002db_0029"><code>backward-word (M-b)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"><code>beginning-of-history (M-<)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-beginning_002dof_002dline-_0028C_002da_0029"><code>beginning-of-line (C-a)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-bracketed_002dpaste_002dbegin-_0028_0029"><code>bracketed-paste-begin ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-C">C</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"><code>call-last-kbd-macro (C-x e)</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-capitalize_002dword-_0028M_002dc_0029"><code>capitalize-word (M-c)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-character_002dsearch-_0028C_002d_005d_0029"><code>character-search (C-])</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"><code>character-search-backward (M-C-])</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-clear_002ddisplay-_0028M_002dC_002dl_0029"><code>clear-display (M-C-l)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-clear_002dscreen-_0028C_002dl_0029"><code>clear-screen (C-l)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete-_0028TAB_0029"><code>complete (<kbd class="key">TAB</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dcommand-_0028M_002d_0021_0029"><code>complete-command (M-!)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dfilename-_0028M_002d_002f_0029"><code>complete-filename (M-/)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dhostname-_0028M_002d_0040_0029"><code>complete-hostname (M-@)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"><code>complete-into-braces (M-{)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dusername-_0028M_002d_007e_0029"><code>complete-username (M-~)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dvariable-_0028M_002d_0024_0029"><code>complete-variable (M-$)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-copy_002dbackward_002dword-_0028_0029"><code>copy-backward-word ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-copy_002dforward_002dword-_0028_0029"><code>copy-forward-word ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-copy_002dregion_002das_002dkill-_0028_0029"><code>copy-region-as-kill ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-D">D</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-dabbrev_002dexpand-_0028_0029"><code>dabbrev-expand ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dchar-_0028C_002dd_0029"><code>delete-char (C-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dchar_002dor_002dlist-_0028_0029"><code>delete-char-or-list ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dhorizontal_002dspace-_0028_0029"><code>delete-horizontal-space ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_002e_002e_002e-M_002d_002d_0029"><code>digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, … <kbd class="kbd">M--</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"><code>display-shell-version (C-x C-v)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_002e_002e_002e_0029"><code>do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, …)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-downcase_002dword-_0028M_002dl_0029"><code>downcase-word (M-l)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dfunctions-_0028_0029"><code>dump-functions ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dmacros-_0028_0029"><code>dump-macros ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dvariables-_0028_0029"><code>dump-variables ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"><code>dynamic-complete-history (M-<kbd class="key">TAB</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-E">E</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"><code>edit-and-execute-command (C-x C-e)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"><code>end-kbd-macro (C-x ))</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dof_002dfile-_0028usually-C_002dd_0029"><code><i class="i">end-of-file</i> (usually C-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dof_002dhistory-_0028M_002d_003e_0029"><code>end-of-history (M->)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dof_002dline-_0028C_002de_0029"><code>end-of-line (C-e)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"><code>exchange-point-and-mark (C-x C-x)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-execute_002dnamed_002dcommand-_0028M_002dx_0029"><code>execute-named-command (M-x)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-export_002dcompletions-_0028_0029"><code>export-completions ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-F">F</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-fetch_002dhistory-_0028_0029"><code>fetch-history ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dbackward_002ddelete_002dchar-_0028_0029"><code>forward-backward-delete-char ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dchar-_0028C_002df_0029"><code>forward-char (C-f)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dsearch_002dhistory-_0028C_002ds_0029"><code>forward-search-history (C-s)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dword-_0028M_002df_0029"><code>forward-word (M-f)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-G">G</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-glob_002dcomplete_002dword-_0028M_002dg_0029"><code>glob-complete-word (M-g)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"><code>glob-expand-word (C-x *)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"><code>glob-list-expansions (C-x g)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-H">H</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"><code>history-and-alias-expand-line ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dexpand_002dline-_0028M_002d_005e_0029"><code>history-expand-line (M-^)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsearch_002dbackward-_0028_0029"><code>history-search-backward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsearch_002dforward-_0028_0029"><code>history-search-forward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"><code>history-substring-search-backward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsubstring_002dsearch_002dforward-_0028_0029"><code>history-substring-search-forward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-I">I</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-insert_002dcomment-_0028M_002d_0023_0029"><code>insert-comment (M-#)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-insert_002dcompletions-_0028M_002d_002a_0029"><code>insert-completions (M-*)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"><code>insert-last-argument (M-. or M-_)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-K">K</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dline-_0028C_002dk_0029"><code>kill-line (C-k)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dregion-_0028_0029"><code>kill-region ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dwhole_002dline-_0028_0029"><code>kill-whole-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dword-_0028M_002dd_0029"><code>kill-word (M-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-M">M</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-magic_002dspace-_0028_0029"><code>magic-space ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-menu_002dcomplete-_0028_0029"><code>menu-complete ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-menu_002dcomplete_002dbackward-_0028_0029"><code>menu-complete-backward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-N">N</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-next_002dhistory-_0028C_002dn_0029"><code>next-history (C-n)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-next_002dscreen_002dline-_0028_0029"><code>next-screen-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"><code>non-incremental-forward-search-history (M-n)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"><code>non-incremental-reverse-search-history (M-p)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-O">O</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-operate_002dand_002dget_002dnext-_0028C_002do_0029"><code>operate-and-get-next (C-o)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-overwrite_002dmode-_0028_0029"><code>overwrite-mode ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-P">P</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"><code>possible-command-completions (C-x !)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dcompletions-_0028M_002d_003f_0029"><code>possible-completions (M-?)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"><code>possible-filename-completions (C-x /)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"><code>possible-hostname-completions (C-x @)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"><code>possible-username-completions (C-x ~)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"><code>possible-variable-completions (C-x $)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-prefix_002dmeta-_0028ESC_0029"><code>prefix-meta (<kbd class="key">ESC</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-previous_002dhistory-_0028C_002dp_0029"><code>previous-history (C-p)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-previous_002dscreen_002dline-_0028_0029"><code>previous-screen-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-print_002dlast_002dkbd_002dmacro-_0028_0029"><code>print-last-kbd-macro ()</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-Q">Q</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"><code>quoted-insert (C-q or C-v)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-R">R</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"><code>re-read-init-file (C-x C-r)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-redraw_002dcurrent_002dline-_0028_0029"><code>redraw-current-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"><code>reverse-search-history (C-r)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-revert_002dline-_0028M_002dr_0029"><code>revert-line (M-r)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-S">S</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_002e_002e_002e_0029"><code>self-insert (a, b, A, 1, !, …)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-set_002dmark-_0028C_002d_0040_0029"><code>set-mark (C-@)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dbackward_002dkill_002dword-_0028_0029"><code>shell-backward-kill-word ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"><code>shell-backward-word (M-C-b)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"><code>shell-expand-line (M-C-e)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dforward_002dword-_0028M_002dC_002df_0029"><code>shell-forward-word (M-C-f)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"><code>shell-kill-word (M-C-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-skip_002dcsi_002dsequence-_0028_0029"><code>skip-csi-sequence ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"><code>spell-correct-word (C-x s)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"><code>start-kbd-macro (C-x ()</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-T">T</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-tilde_002dexpand-_0028M_002d_0026_0029"><code>tilde-expand (M-&)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-transpose_002dchars-_0028C_002dt_0029"><code>transpose-chars (C-t)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-transpose_002dwords-_0028M_002dt_0029"><code>transpose-words (M-t)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-U">U</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"><code>undo (C-_ or C-x C-u)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-universal_002dargument-_0028_0029"><code>universal-argument ()</code></a></td><td class="printindex-index-section"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-unix_002dfilename_002drubout-_0028_0029"><code>unix-filename-rubout ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-unix_002dline_002ddiscard-_0028C_002du_0029"><code>unix-line-discard (C-u)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-unix_002dword_002drubout-_0028C_002dw_0029"><code>unix-word-rubout (C-w)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-upcase_002dword-_0028M_002du_0029"><code>upcase-word (M-u)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Function-Index_fn_letter-Y">Y</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-yank-_0028C_002dy_0029"><code>yank (C-y)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"><code>yank-last-arg (M-. or M-_)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"><code>yank-nth-arg (M-C-y)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-yank_002dpop-_0028M_002dy_0029"><code>yank-pop (M-y)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
</table>
|
|
<table class="fn-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Function-Index_fn_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-G"><b>G</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-N"><b>N</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-O"><b>O</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Q"><b>Q</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Y"><b>Y</b></a>
|
|
|
|
</td></tr></table>
|
|
</div>
|
|
|
|
<hr>
|
|
</div>
|
|
<div class="appendixsec-level-extent" id="Concept-Index">
|
|
<div class="nav-panel">
|
|
<p>
|
|
Previous: <a href="#Function-Index" accesskey="p" rel="prev">Function Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<h3 class="appendixsec" id="Concept-Index-1"><span>D.5 Concept Index<a class="copiable-link" href="#Concept-Index-1"> ¶</a></span></h3>
|
|
<div class="printindex cp-printindex">
|
|
<table class="cp-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Concept-Index_cp_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-J"><b>J</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-L"><b>L</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-N"><b>N</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-O"><b>O</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Q"><b>Q</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-V"><b>V</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-W"><b>W</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Y"><b>Y</b></a>
|
|
|
|
</td></tr></table>
|
|
<table class="cp-entries-printindex">
|
|
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-A">A</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-alias-expansion">alias expansion</a></td><td class="printindex-index-section"><a href="#Aliases">Aliases</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic-evaluation">arithmetic evaluation</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic-expansion">arithmetic expansion</a></td><td class="printindex-index-section"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic-operators">arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic_002c-shell">arithmetic, shell</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-arrays">arrays</a></td><td class="printindex-index-section"><a href="#Arrays">Arrays</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-B">B</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-background">background</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-Bash-configuration">Bash configuration</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-Bash-installation">Bash installation</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-binary-arithmetic-operators">binary arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-bitwise-arithmetic-operators">bitwise arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-Bourne-shell">Bourne shell</a></td><td class="printindex-index-section"><a href="#Basic-Shell-Features">Basic Shell Features</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-brace-expansion">brace expansion</a></td><td class="printindex-index-section"><a href="#Brace-Expansion">Brace Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-builtin-1">builtin</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-C">C</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command-editing">command editing</a></td><td class="printindex-index-section"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command-execution">command execution</a></td><td class="printindex-index-section"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command-expansion">command expansion</a></td><td class="printindex-index-section"><a href="#Simple-Command-Expansion">Simple Command Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command-history">command history</a></td><td class="printindex-index-section"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command-search">command search</a></td><td class="printindex-index-section"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command-substitution">command substitution</a></td><td class="printindex-index-section"><a href="#Command-Substitution">Command Substitution</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-command-timing">command timing</a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-compound">commands, compound</a></td><td class="printindex-index-section"><a href="#Compound-Commands">Compound Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-conditional">commands, conditional</a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-grouping">commands, grouping</a></td><td class="printindex-index-section"><a href="#Command-Grouping">Command Grouping</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-lists">commands, lists</a></td><td class="printindex-index-section"><a href="#Lists">Lists</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-looping">commands, looping</a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-pipelines">commands, pipelines</a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-shell">commands, shell</a></td><td class="printindex-index-section"><a href="#Shell-Commands">Shell Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-simple">commands, simple</a></td><td class="printindex-index-section"><a href="#Simple-Commands">Simple Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-comments_002c-shell">comments, shell</a></td><td class="printindex-index-section"><a href="#Comments">Comments</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-Compatibility-Level">Compatibility Level</a></td><td class="printindex-index-section"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-Compatibility-Mode">Compatibility Mode</a></td><td class="printindex-index-section"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-completion-builtins">completion builtins</a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-conditional-arithmetic-operator">conditional arithmetic operator</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-configuration">configuration</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-control-operator">control operator</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-coprocess">coprocess</a></td><td class="printindex-index-section"><a href="#Coprocesses">Coprocesses</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-D">D</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-directory-stack">directory stack</a></td><td class="printindex-index-section"><a href="#The-Directory-Stack">The Directory Stack</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-dollar_002dsingle-quote-quoting">dollar-single quote quoting</a></td><td class="printindex-index-section"><a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-E">E</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-editing-command-lines">editing command lines</a></td><td class="printindex-index-section"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-environment">environment</a></td><td class="printindex-index-section"><a href="#Environment">Environment</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-evaluation_002c-arithmetic">evaluation, arithmetic</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-event-designators">event designators</a></td><td class="printindex-index-section"><a href="#Event-Designators">Event Designators</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-execution-environment">execution environment</a></td><td class="printindex-index-section"><a href="#Command-Execution-Environment">Command Execution Environment</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-exit-status">exit status</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-exit-status-1">exit status</a></td><td class="printindex-index-section"><a href="#Exit-Status">Exit Status</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion">expansion</a></td><td class="printindex-index-section"><a href="#Shell-Expansions">Shell Expansions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-arithmetic">expansion, arithmetic</a></td><td class="printindex-index-section"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-brace">expansion, brace</a></td><td class="printindex-index-section"><a href="#Brace-Expansion">Brace Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-filename">expansion, filename</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-parameter">expansion, parameter</a></td><td class="printindex-index-section"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-pathname">expansion, pathname</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-tilde">expansion, tilde</a></td><td class="printindex-index-section"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expressions_002c-arithmetic">expressions, arithmetic</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-expressions_002c-conditional">expressions, conditional</a></td><td class="printindex-index-section"><a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-F">F</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-field">field</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-filename">filename</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-filename-expansion">filename expansion</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-foreground">foreground</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-functions_002c-shell">functions, shell</a></td><td class="printindex-index-section"><a href="#Shell-Functions">Shell Functions</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-H">H</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history-builtins">history builtins</a></td><td class="printindex-index-section"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history-events">history events</a></td><td class="printindex-index-section"><a href="#Event-Designators">Event Designators</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history-expansion">history expansion</a></td><td class="printindex-index-section"><a href="#History-Interaction">History Interaction</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-history-list">history list</a></td><td class="printindex-index-section"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-History_002c-how-to-use">History, how to use</a></td><td class="printindex-index-section"><a href="#A-Programmable-Completion-Example">A Programmable Completion Example</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-I">I</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-identifier">identifier</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-initialization-file_002c-readline">initialization file, readline</a></td><td class="printindex-index-section"><a href="#Readline-Init-File">Readline Init File</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-installation">installation</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-interaction_002c-readline">interaction, readline</a></td><td class="printindex-index-section"><a href="#Readline-Interaction">Readline Interaction</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-interactive-shell">interactive shell</a></td><td class="printindex-index-section"><a href="#Invoking-Bash">Invoking Bash</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-interactive-shell-1">interactive shell</a></td><td class="printindex-index-section"><a href="#Interactive-Shells">Interactive Shells</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-internationalization">internationalization</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-internationalized-scripts">internationalized scripts</a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-J">J</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-job">job</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-job-control">job control</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-job-control-1">job control</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-K">K</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-kill-ring">kill ring</a></td><td class="printindex-index-section"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-killing-text">killing text</a></td><td class="printindex-index-section"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-L">L</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-localization">localization</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-login-shell">login shell</a></td><td class="printindex-index-section"><a href="#Invoking-Bash">Invoking Bash</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-M">M</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-matching_002c-pattern">matching, pattern</a></td><td class="printindex-index-section"><a href="#Pattern-Matching">Pattern Matching</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-metacharacter">metacharacter</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-N">N</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-name">name</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-native-languages">native languages</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-notation_002c-readline">notation, readline</a></td><td class="printindex-index-section"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-O">O</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-operator_002c-shell">operator, shell</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-P">P</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-parameter-expansion">parameter expansion</a></td><td class="printindex-index-section"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-parameters">parameters</a></td><td class="printindex-index-section"><a href="#Shell-Parameters">Shell Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-parameters_002c-positional">parameters, positional</a></td><td class="printindex-index-section"><a href="#Positional-Parameters">Positional Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-parameters_002c-special">parameters, special</a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-pathname-expansion">pathname expansion</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-pattern-matching">pattern matching</a></td><td class="printindex-index-section"><a href="#Pattern-Matching">Pattern Matching</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-pipeline">pipeline</a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIX">POSIX</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIX-description">POSIX description</a></td><td class="printindex-index-section"><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIX-Mode">POSIX Mode</a></td><td class="printindex-index-section"><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-process-group">process group</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-process-group-ID">process group ID</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-process-substitution">process substitution</a></td><td class="printindex-index-section"><a href="#Process-Substitution">Process Substitution</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-programmable-completion">programmable completion</a></td><td class="printindex-index-section"><a href="#Programmable-Completion">Programmable Completion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-prompting">prompting</a></td><td class="printindex-index-section"><a href="#Controlling-the-Prompt">Controlling the Prompt</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-Q">Q</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-quoting">quoting</a></td><td class="printindex-index-section"><a href="#Quoting">Quoting</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-quoting_002c-ANSI">quoting, ANSI</a></td><td class="printindex-index-section"><a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-R">R</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-Readline_002c-how-to-use">Readline, how to use</a></td><td class="printindex-index-section"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-redirection">redirection</a></td><td class="printindex-index-section"><a href="#Redirections">Redirections</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-reserved-word">reserved word</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-reserved-words">reserved words</a></td><td class="printindex-index-section"><a href="#Reserved-Words">Reserved Words</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-restricted-shell">restricted shell</a></td><td class="printindex-index-section"><a href="#The-Restricted-Shell">The Restricted Shell</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-return-status">return status</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-S">S</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-arithmetic">shell arithmetic</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-function">shell function</a></td><td class="printindex-index-section"><a href="#Shell-Functions">Shell Functions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-script">shell script</a></td><td class="printindex-index-section"><a href="#Shell-Scripts">Shell Scripts</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-variable">shell variable</a></td><td class="printindex-index-section"><a href="#Shell-Parameters">Shell Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002c-interactive">shell, interactive</a></td><td class="printindex-index-section"><a href="#Interactive-Shells">Interactive Shells</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-signal">signal</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-signal-handling">signal handling</a></td><td class="printindex-index-section"><a href="#Signals">Signals</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-special-builtin">special builtin</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-special-builtin-1">special builtin</a></td><td class="printindex-index-section"><a href="#Special-Builtins">Special Builtins</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-startup-files">startup files</a></td><td class="printindex-index-section"><a href="#Bash-Startup-Files">Bash Startup Files</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-string-translations">string translations</a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-suspending-jobs">suspending jobs</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-T">T</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-tilde-expansion">tilde expansion</a></td><td class="printindex-index-section"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-token">token</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-translation_002c-native-languages">translation, native languages</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-U">U</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-unary-arithmetic-operators">unary arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-V">V</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-variable_002c-shell">variable, shell</a></td><td class="printindex-index-section"><a href="#Shell-Parameters">Shell Parameters</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-variables_002c-readline">variables, readline</a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-W">W</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-word">word</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-word-splitting">word splitting</a></td><td class="printindex-index-section"><a href="#Word-Splitting">Word Splitting</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
<tr><th id="Concept-Index_cp_letter-Y">Y</th></tr>
|
|
<tr><td></td><td class="printindex-index-entry"><a href="#index-yanking-text">yanking text</a></td><td class="printindex-index-section"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr>
|
|
<tr><td colspan="3"><hr></td></tr>
|
|
</table>
|
|
<table class="cp-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Concept-Index_cp_letter-A"><b>A</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-B"><b>B</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-C"><b>C</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-D"><b>D</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-E"><b>E</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-F"><b>F</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-H"><b>H</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-I"><b>I</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-J"><b>J</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-K"><b>K</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-L"><b>L</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-M"><b>M</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-N"><b>N</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-O"><b>O</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-P"><b>P</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Q"><b>Q</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-R"><b>R</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-S"><b>S</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-T"><b>T</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-U"><b>U</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-V"><b>V</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-W"><b>W</b></a>
|
|
|
|
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Y"><b>Y</b></a>
|
|
|
|
</td></tr></table>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|