Bash中的特殊字符


很早之前在blog中就记录过一篇文章:Linux Shell中的特殊字符,但觉得总结得还不够——不够直接,所以后来又去网上搜了搜,还真是找到了不少相关内容,之前知道的还是太少了o(╯□╰)o 学无止境,慢慢来吧……

搜索关键字:
参考链接:
相关链接:

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 characters 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 arguments, 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 separator — 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.
(()) Arithmetic 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.


最后来张从网上找到的表格,更加直观的显示出shell(虽然是csh和sh的,但Bash也大体相同,只有少许差异)中的特殊字符:

Table 8.3 is a table of special characters and operators in the C shell ( csh ) and Bourne shell ( sh ). The chart also includes several combinations of characters just to be complete. As in other parts of this book, the sh entries apply to ksh and bash ; the csh entries apply to tcsh .

List of Special Characters and Their Meanings
Character Where Meaning Article
ESC csh Filename completion. 9.8
RETURN csh, sh Execute command. 41.2
space csh, sh Argument separator. 8.5
TAB csh, sh Argument separator. 8.5
TAB bash Filename completion. 9.8
# csh, sh Start a comment. 44.2
` csh, sh Command substitution (backquotes). 9.16
sh Weak quotes. 8.14
csh Weak quotes. 8.15 , 8.14
sh Strong quotes. 8.14
csh Strong quotes. 8.15 , 8.14 See \.
\ sh Single-character quote. 8.14
\ csh Single-character quote. 8.15 , 8.14
$ var csh, sh Variable. 6.1 , 6.8
${ var } csh, sh Same as $ var . 6.8
$ var : mod csh Edit var with modifier mod 9.6
${ var – default } sh If var not set, use default . 45.12
${ var = default } sh If var not set, set it to default and use that value. 45.12
${ var + instead } sh If var set, use instead . Otherwise, null string. 45.12
${ var ? message } sh If var not set, print message (else default). If var set, use its value. 45.12
${ var # pat } ksh, bash Value of var with smallest pat deleted from start. 9.7
${ var ## pat } ksh, bash Value of var with largest pat deleted from start. 9.7
${ var % pat } ksh, bash Value of var with smallest pat deleted from end. 9.7
${ var %% pat } ksh, bash Value of var with largest pat deleted from end. 9.7
| csh, sh Pipe standard output. 1.4 , 13.1
|& csh Pipe standard output and standard error. 13.5
^ sh only Pipe character (obsolete).
^ csh, bash Edit previous command line. 11.5
& csh, sh Run program in background. 1.27 , 1.28
? csh, sh Match one character. 1.16 , 15.2
* csh, sh Match zero or more characters. 1.16 , 15.2
; csh, sh Command separator. 8.5
;; sh End of case statement. 44.5
~ csh, ksh, bash Home directory. 14.11
~ user csh, ksh, bash Home directory of user . 14.11
! csh, bash Command history. 11.2
Programs Start of optional argument. 8.5
Programs Read standard input. (Only certain programs.) 13.13
$# csh, sh Number of arguments to script. 44.15
“$@” sh Original arguments to script. 44.15
$* csh, sh Arguments to script. 44.15
$- sh Flags set in shell. 2.11
$? sh Status of previous command. 44.7
$$ csh, sh Process identification number. 8.14
$! sh Process identification number of last background job. 7.12
$< csh Read input from terminal. 9.11
cmd1 && cmd2 csh, sh Execute cmd2 if cmd1 succeeds. 44.9
cmd1 || cmd2 csh, sh Execute cmd2 if cmd1 fails. 44.9
$(..) ksh, bash Command substitution. 45.31 , 9.16
((..)) ksh, bash Arithmetic evaluation.
\. file sh Execute commands from file in this shell. 44.23
: sh Evaluate arguments, return true. 45.9
: sh Separate values in paths. 6.4 , 14.5 , 21.8
: csh Variable modifier. 9.6
[] csh, sh Match range of characters. 1.16 , 15.2
[] sh Test. 44.20
% job csh, ksh, bash Identify job number. 12.1
( cmd ; cmd ) csh, sh Run cmd ; cmd in a subshell. 13.7
{} csh, bash In-line expansions. 9.5
{ cmd ; cmd ; } sh Like ( cmd ; cmd ) without a subshell. 13.8
> file csh, sh Redirect standard output. 13.1
>> file csh, sh Append standard output. 13.1
< file csh, sh Redirect standard input. 13.1
<< word csh, sh Read until word , do command and variable substitution. 8.18 , 9.14
<<\ word csh, sh Read until word , no substitution. 8.18
<<- word sh Read until word , ignoring leading TABs. 8.18
>>!  file csh Append to file , even if noclobber set and file doesn’t exist. 13.6
>!  file csh Output to file , even if noclobber set and file exists. 13.6
>|  file ksh, bash Output to file , even if noclobber set and file exists. 13.6
>& file csh Redirect standard output and standard error to file . 13.5
m > file sh Redirect output file descriptor m to file . 45.21
m >> file sh Append output file descriptor m to file .
m < file sh Redirect input file descriptor m from file .
<& m sh Take standard input from file descriptor m .
<&- sh Close standard input. 45.10
>& m sh Use file descriptor m as standard output. 45.21
>&- sh Close standard output. 45.21
m <& n sh Connect input file descriptor n to file descriptor m . 45.22
m <&- sh Close input file descriptor m . 45.21
n >& m sh Connect output file descriptor n to file descriptor m . 45.21
m >&- sh Close output file descriptor m . 45.21

 

, ,

《 “Bash中的特殊字符” 》 有 6 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注