Bash Reference Manual
Reference Documentation for Bash
Edition 4.4, for Bash Version 4.4.
September 2016
Chet Ramey, Case Western Reserve University
Brian Fox, Free Software Foundation
This text is a brief description of the features that are present in the Bash shell (version
4.4, 7 September 2016).
This is Edition 4.4, last updated 7 September 2016, of The GNU Bash Reference Manual,
for Bash, Version 4.4.
Copyright
c
1988–2016 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”.
i
Table of Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 What is Bash?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 What is a shell? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Basic Shell Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1 Shell Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.1 Shell Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.2 Quoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2.1 Escape Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2.2 Single Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2.3 Double Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2.4 ANSI-C Quoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2.5 Locale-Specific Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.3 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Shell Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1 Simple Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2 Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.3 Lists of Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.4 Compound Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.4.1 Looping Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.4.2 Conditional Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.4.3 Grouping Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.5 Coprocesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.6 GNU Parallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Shell Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4 Shell Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4.1 Positional Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4.2 Special Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5 Shell Expansions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.5.1 Brace Expansion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.5.2 Tilde Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5.3 Shell Parameter Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.5.4 Command Substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5.5 Arithmetic Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5.6 Process Substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5.7 Word Splitting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5.8 Filename Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5.8.1 Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.5.9 Quote Removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.6 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
ii
3.6.1 Redirecting Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6.2 Redirecting Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6.3 Appending Redirected Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6.4 Redirecting Standard Output and Standard Error . . . . . . . . . 34
3.6.5 Appending Standard Output and Standard Error . . . . . . . . . 34
3.6.6 Here Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.6.7 Here Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.6.8 Duplicating File Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.6.9 Moving File Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6.10 Opening File Descriptors for Reading and Writing . . . . . . . 36
3.7 Executing Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.7.1 Simple Command Expansion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.7.2 Command Search and Execution . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.7.3 Command Execution Environment . . . . . . . . . . . . . . . . . . . . . . . . 37
3.7.4 Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.7.5 Exit Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.6 Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.8 Shell Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4 Shell Builtin Commands. . . . . . . . . . . . . . . . . . . . . . . 42
4.1 Bourne Shell Builtins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2 Bash Builtin Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3 Modifying Shell Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.3.1 The Set Builtin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.3.2 The Shopt Builtin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.4 Special Builtins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5 Shell Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.1 Bourne Shell Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.2 Bash Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6 Bash Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.1 Invoking Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2 Bash Startup Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.3 Interactive Shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.3.1 What is an Interactive Shell? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.2 Is this Shell Interactive? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.3 Interactive Shell Behavior. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.4 Bash Conditional Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.5 Shell Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.6 Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.7 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.8 The Directory Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.8.1 Directory Stack Builtins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.9 Controlling the Prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.10 The Restricted Shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.11 Bash POSIX Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
iii
7 Job Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.1 Job Control Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.2 Job Control Builtins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.3 Job Control Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8 Command Line Editing. . . . . . . . . . . . . . . . . . . . . . . 104
8.1 Introduction to Line Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.2 Readline Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.2.1 Readline Bare Essentials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.2.2 Readline Movement Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.2.3 Readline Killing Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.2.4 Readline Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.2.5 Searching for Commands in the History . . . . . . . . . . . . . . . . . . 106
8.3 Readline Init File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.3.1 Readline Init File Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.3.2 Conditional Init Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
8.3.3 Sample Init File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.4 Bindable Readline Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.4.1 Commands For Moving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.4.2 Commands For Manipulating The History . . . . . . . . . . . . . . . 120
8.4.3 Commands For Changing Text. . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8.4.4 Killing And Yanking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
8.4.5 Specifying Numeric Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.4.6 Letting Readline Type For You . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.4.7 Keyboard Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8.4.8 Some Miscellaneous Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8.5 Readline vi Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
8.6 Programmable Completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.7 Programmable Completion Builtins . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
8.8 A Programmable Completion Example. . . . . . . . . . . . . . . . . . . . . . . . 134
9 Using History Interactively . . . . . . . . . . . . . . . . . . 137
9.1 Bash History Facilities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.2 Bash History Builtins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.3 History Expansion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
9.3.1 Event Designators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.3.2 Word Designators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.3.3 Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141