Differences between revisions 31 and 32
Revision 31 as of 2014-11-28 08:21:30
Size: 4905
Editor: geirha
Comment: spam
Revision 32 as of 2014-11-28 15:33:17
Size: 5031
Comment: Characters to table. A bit of touch-up on the explanations. Added "negate" (!) to list. Notes at end to list.
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
Line 4: Line 5:
Line 5: Line 7:
Line 6: Line 9:
A group of characters have been exempted, that when we use them, they are evaluated by [[Bash]] to have a ''non-literal'' meaning. Instead these characters carry out a special instruction, or have an alternate meaning; they are called "special characters", or "meta-characters".
Line 8: Line 10:
These are the characters and their meaning: A group of characters have been exempted, that when we use them, they are evaluated by [[Bash]] to have a ''non-literal'' meaning. Instead, these characters carry out a special instruction, or have an alternate meaning; they are called "special characters", or "meta-characters".
Line 10: Line 12:
 * '''''[whitespace]''''': Whitespace (spaces, tabs and newlines). Bash uses whitespace to determine where words begin and end. The first word of each command is used as the command name; any additional words become arguments to that command.
 * '''{{{$}}}''': Expansion character. This character is used in most substitutions, including parameter expansion (variable substitution). More about this later.
 * '''{{{'text'}}}''': Single quotes protect the text inside from any kind of expansion by the shell and keep it from being split into multiple words or arguments. They also prevent the special meaning of all special characters inside.
 * '''{{{"text"}}}''': Double quotes protect the text inside from being split into multiple words or arguments, but they permit substitutions to occur. They prevent the special meaning of ''most'' special characters inside them -- basically, all except for the `$` and some others.
 * '''{{{#}}}''': Comment character. Any word beginning with `#` begins a ''comment'' that extends to the next newline. Comments are not processed by the shell.
 * '''{{{;}}}''': Command separator. The semicolon is used to separate multiple commands from each other if the user chooses to keep them on the same line. It's ''basically'' the same thing as a newline.
 * '''{{{\}}}''': Escape character. The backslash prevents the next character from being used in any special sort of way. This works inside double quotes, or outside of all quotes, but ''not'' inside single quotes.
 * '''{{{~}}}''': The tilde is a shortcut for your home directory. By itself, or when followed by a `/`, it is the same as `$HOME`. When followed by a username, it means ''that user's'' home directory. Examples: `cd ~john/bin; cp coolscript ~/bin`
 * '''{{{>}}}''' or '''{{{<}}}''': Redirection characters. These characters are used to modify (redirect) the input and/or output of a command. Redirections will be covered later.
 * '''{{{|}}}''': Pipelines allow you to send the output of one command as the input to another command.
 * '''{{{[[ expression ]]}}}''': Test expression. This evaluates the conditional expression as a logical statement, to determine whether it's "true" or "false".
 * '''{{{ { commands; } }}}''': Command grouping. The commands inside the braces are treated as though they were only one command. It is convenient for places where Bash syntax requires only one command to be present, and you don't feel a function is warranted.
 * '''{{{`command`}}}''', '''{{{$(command)}}}''': [[CommandSubstitution|Command substitution]] (The latter form is '''highly''' preferred.) Command substitution executes the inner command first, and then replaces the whole {{{`...`}}} or {{{$(...)}}} with that command's standard output.
 * '''{{{(command)}}}''': [[SubShell|Subshell]] Execution. This executes the command in a new bash shell, instead of in the current one, like a safe sandbox. If the command causes side effects (like changing variables), those changes will have no effect on the current shell.
 * '''{{{((expression))}}}''': [[ArithmeticExpression|Arithmetic]] Command. Inside the parentheses, operators such as +, -, * and / are seen as mathematical operators. This can be used for assignments like `((a=b+7))` as well as tests like `if ((a < b))`. More on this later.
 * '''{{{$((expression))}}}''': Arithmetic Substitution. Comparable to the above, but this expression is replaced with the result of its arithmetic evaluation. Example: `echo "The average is $(( (a+b)/2 ))"`.
To explain the special characters in all the cases in which they may be used, read the section on the [[http://www.tldp.org/LDP/abs/html/special-chars.html|TLDP guide]]. Here are some of the more common special characters uses:
Line 27: Line 14:
Some examples: || '''Char.''' || '''Description''' ||
|| `" "` || ''Whitespace'' — this is a tab, newline, vertical tab, form feed, carriage return, or space. Bash uses whitespace to determine where words begin and end. The first word is the command name and additional words become arguments to that command. ||
|| `$` || ''Expansion'' — introduces various types of expansion: parameter expansion (e.g. `$var` or `${var}`), [[CommandSubstitution|command substitution]] (e.g. `$(command)`), or arithmetic expansion (e.g. `$((expression))`). More on expansions later. ||
|| `''` || ''Single quotes'' — protect the text inside them so that it has a ''literal'' meaning. With them, generally any kind of interpretation by Bash is ignored: special charaters are passed over and multiple words are prevented from being split. ||
|| `""` || ''Double quotes'' — protect the text inside them from being split into multiple words or argruments, yet allow substitutions to occur; the meaning of most other special characters is usually prevented. ||
|| `\` || ''Escape'' — (backslash) prevents the next character from being interpreted as a special character. This works outside of quoting, inside double quotes, and generally ignored in single quotes. ||
|| `#` || ''Comment'' — an introduction of a `#` character begins a commentary that extends to the end of the line. Comments are notes of explanation and are not processed by the shell. ||
|| `[[]]` || ''Test'' — an evaluation of a conditional expression to determine whether it is "true" or "false". Tests are used in Bash to evaluate a number of conditions. More of this will be covered later. ||
|| `!` || ''Negate'' — used to negate or reverse a test or exit status. For example: `! grep text file; exit $?`. ||
|| `><` || ''Redirection'' — redirect a command's ''output'' or ''input''. Redirections will be covered later. ||
|| `|` || ''Pipe'' — redirect output from a initial command to the input of secondary command. This is a method of chaining commands together. Example: `echo "Hello beautiful." | grep -o beautiful`. ||
|| `;` || ''Command seperator'' — a representation of a newline. Used to separate multiple commands that are on the same line. ||
|| `{}` || ''Inline group'' — commands inside the curly braces are treated as if they were one command. It is convenient to use these when Bash syntax requires only one command and a function doesn't feel warranted. ||
|| `()` || ''Subshell group'' — similar to the above but where commands within are executed in subshell. Used much like a sandbox, if a command causes side effects (like changing variables), it will have no effect on the current shell. ||
|| `(())` || ''Arithemetic expression'' — with an [[ArithmeticExpression|arithmetic expression]], characters such as `+`, `-`, `*`, and `/` are mathematical operators used for calculations. They can be used for variable assignments like `(( a = 1 + 4 ))` as well as tests like `if (( a < b ))`. More on this later. ||
|| `$(())` || ''Arithmetic expansion'' — Comparable to the above, but the expression is replaced with the result of its arithmetic evaluation. Example: `echo "The average is $(( (a+b)/2 ))"`. ||
|| `~` || ''Home directory'' — the tilde is a representation of the home directory. When followed by a `/`, it means the current user's home directory; otherwise, a username will have to be specified (e.g. `ls ~/Documents; cp ~john/.bashrc .`). ||

Examples:
Line 41: Line 47:
$ (( 5 > 0 )) && echo "Five is bigger than zero."
Five is bigger than zero.
$ (( 5 > 0 )) && echo "Five is greater than zero."
Five is greater than zero.
Line 45: Line 51:
'''Additionally:'''
Line 46: Line 53:
 * '''In The Manual — [[http://www.gnu.org/software/bash/manual/html_node/Shell-Syntax.html#Shell-Syntax|Shell Syntax]]'''
 * ''Special Characters'' — Characters that have a special meaning to Bash. Usually their meaning is interpreted and then they are removed from the command before executing it.
Line 47: Line 56:

--------
 . '''In The Manual: [[http://www.gnu.org/software/bash/manual/html_node/Shell-Syntax.html#Shell-Syntax|Shell Syntax]]'''
----
 . ''Special Characters'': Characters that have a special meaning to Bash. Usually their meaning is interpreted and then they are removed from the command before executing it.
<<Anchor(EndOfContent)>>
--------

<- Commands and Arguments | Parameters ->


Special characters

A group of characters have been exempted, that when we use them, they are evaluated by Bash to have a non-literal meaning. Instead, these characters carry out a special instruction, or have an alternate meaning; they are called "special characters", or "meta-characters".

To explain the special characters in all the cases in which they may be used, read the section on the TLDP guide. Here are some of the more common special characters uses:

Char.

Description

" "

Whitespace — this is a tab, newline, vertical tab, form feed, carriage return, or space. Bash uses whitespace to determine where words begin and end. The first word is the command name and additional words become arguments to that command.

$

Expansion — introduces various types of expansion: parameter expansion (e.g. $var or ${var}), command substitution (e.g. $(command)), or arithmetic expansion (e.g. $((expression))). More on expansions later.

''

Single quotes — protect the text inside them so that it has a literal meaning. With them, generally any kind of interpretation by Bash is ignored: special charaters are passed over and multiple words are prevented from being split.

""

Double quotes — protect the text inside them from being split into multiple words or argruments, yet allow substitutions to occur; the meaning of most other special characters is usually prevented.

\

Escape — (backslash) prevents the next character from being interpreted as a special character. This works outside of quoting, inside double quotes, and generally ignored in single quotes.

#

Comment — an introduction of a # character begins a commentary that extends to the end of the line. Comments are notes of explanation and are not processed by the shell.

[[]]

Test — an evaluation of a conditional expression to determine whether it is "true" or "false". Tests are used in Bash to evaluate a number of conditions. More of this will be covered later.

!

Negate — used to negate or reverse a test or exit status. For example: ! grep text file; exit $?.

><

Redirection — redirect a command's output or input. Redirections will be covered later.

|

Pipe — redirect output from a initial command to the input of secondary command. This is a method of chaining commands together. Example: echo "Hello beautiful." | grep -o beautiful.

;

Command seperator — a representation of a newline. Used to separate multiple commands that are on the same line.

{}

Inline group — commands inside the curly braces are treated as if they were one command. It is convenient to use these when Bash syntax requires only one command and a function doesn't feel warranted.

()

Subshell group — similar to the above but where commands within are executed in subshell. Used much like a sandbox, if a command causes side effects (like changing variables), it will have no effect on the current shell.

(())

Arithemetic expression — with an arithmetic expression, characters such as +, -, *, and / are mathematical operators used for calculations. They can be used for variable assignments like (( a = 1 + 4 )) as well as tests like if (( a < b )). More on this later.

$(())

Arithmetic expansion — Comparable to the above, but the expression is replaced with the result of its arithmetic evaluation. Example: echo "The average is $(( (a+b)/2 ))".

~

Home directory — the tilde is a representation of the home directory. When followed by a /, it means the current user's home directory; otherwise, a username will have to be specified (e.g. ls ~/Documents; cp ~john/.bashrc .).

Examples:

$ echo "I am $LOGNAME"
I am lhunath
$ echo 'I am $LOGNAME'
I am $LOGNAME
$ # boo
$ echo An open\ \ \ space
An open   space
$ echo "My computer is $(hostname)"
My computer is Lyndir
$ echo boo > file
$ echo $(( 5 + 5 ))
10
$ (( 5 > 0 )) && echo "Five is greater than zero."
Five is greater than zero.

Additionally:

  • In The Manual — Shell Syntax

  • Special Characters — Characters that have a special meaning to Bash. Usually their meaning is interpreted and then they are removed from the command before executing it.

<- Commands and Arguments | Parameters ->

BashGuide/SpecialCharacters (last edited 2014-11-28 15:33:17 by Todd Partridge)