Bash Shell 中的特殊字符
2015-01-21 15:02
134 查看
什么是Bash Shell中的特殊字符?某些特殊字符在Bash Shell里不是表示其字符含义本身,而是另有含义,称为:meta-meaning。
1.字符:#
代表注释,如果有一行以#开始,那么意味着这行不会被执行,只是一行说明注释。
例如:
但是这里有个例外,那就是脚本的第一行我们经常看到的:
从#为开始,后面的字符即为注释,直到该行结束。体会下面几个例子:
2.字符:;
分号[semicolon],作为命令的分割符,说明一条命令到此结束。使用分号,你可以在一行写多条命令,这个我们经常见。
例如:
3.字符:;;
两个分号在一起[double semicolon],这个只用在case语句里:
4.字符:"
双引号[double quote]表示部分引用[partial quoting],多数情况下,双引号内的字符原样输出,但其中的变量会被替换。比如:
5.字符:’
单引号[single quote],代表全引用[full quoting],引号内的字符全部原样输出,即使有变量也不做相应的替换。
例子上面有了,不再重复了。
6.字符:,
逗号[comma operator],连接2个算式,但是只有最后一个算式的值被返回。
上面的语句把a赋值为9,并把15除以3的结果5,赋值给t2.
另外,逗号操作符,也可以连接字符串:
7.字符:
反斜杠[backslash]就是换码符[escape],为单个字符的引用机制,通过对字符的引用来改变它本来的含义。
比如:
8.字符:`
命令替换符,就是键盘的左上角波浪符下面的字符,不要看错了,不是单引号噢,<code>`</code>中间放一个可执行的命令<code>`</code>,这个符号也叫反引号。
举个小例子:
9.冒号:
冒号[colon],称为空命令[null command],即什么都不执行,返回值为true,也就是0,属于Bash的内置命令。
下面2段代码把冒号当成了判断条件:
冒号:也用来当作域分隔符,你在/etc/passwd和$PATH变量中可以看到它:
最糟心的时,冒号这东西还可以做函数名,如果想让代码把人搞晕的话,这么搞
下面的这个比较实用:
{a..z} 生成字符a到z之间的所有字符,当然也可以是数字,比如:{1..9}
体会下这个代码
上面解释了一些Bash Shell中的部分特殊字符,在<a Advanced Bash-Scripting Guide中有更多、更详细的介绍,有兴趣可以参考。
原文:http://www.hdfeel.net/2015/01/bash-shell-special-character/
本文出自 “HDFeel的IT视点” 博客,请务必保留此出处http://hdfeel.blog.51cto.com/9805995/1606620
1.字符:#
代表注释,如果有一行以#开始,那么意味着这行不会被执行,只是一行说明注释。
例如:
# this is comments这是一行注释。
但是这里有个例外,那就是脚本的第一行我们经常看到的:
#!/bin/bash这个指示一个脚本的解释器,说明这个脚本是由/bin/bash 来解释的。
从#为开始,后面的字符即为注释,直到该行结束。体会下面几个例子:
echo "The # here does not begin a comment." echo 'The # here does not begin a comment.'引用内的字符按原意输出。
echo The \# here does not begin a comment.这个使用了\把#做了转义,即把#原样输出。
echo The # here begins a comment.这个惨了,被截断了,只输出: The
echo ${PATH#*:}这个是参数替换,不是注释符。
echo $(( 2#101011 ))这个是基数指示符,也不是注释符,说明后面的数是二进制的。
2.字符:;
分号[semicolon],作为命令的分割符,说明一条命令到此结束。使用分号,你可以在一行写多条命令,这个我们经常见。
例如:
hdfeel$ echo hello; echo world; hello world hdfeel$
3.字符:;;
两个分号在一起[double semicolon],这个只用在case语句里:
case "$variable" in abc) echo "\$variable = abc" ;; xyz) echo "\$variable = xyz" ;; esac
4.字符:"
双引号[double quote]表示部分引用[partial quoting],多数情况下,双引号内的字符原样输出,但其中的变量会被替换。比如:
hdfeel$ fileName="a.txt" hdfeel$ echo "the file name is $fileName" hdfeel$ the file name is a.txt这可能正是我们需要的。如果你想原样输出,那么用单引号,或者使用反斜杠\对$进行转义。
echo "the file name is \$fileName" echo 'the file name is $fileName'
5.字符:’
单引号[single quote],代表全引用[full quoting],引号内的字符全部原样输出,即使有变量也不做相应的替换。
例子上面有了,不再重复了。
6.字符:,
逗号[comma operator],连接2个算式,但是只有最后一个算式的值被返回。
hdfeel$ let "t2 = ((a = 9, 15 / 3))"
上面的语句把a赋值为9,并把15除以3的结果5,赋值给t2.
另外,逗号操作符,也可以连接字符串:
for file in /{,usr/}bin/*calc # ^ 在/bin和/usr/bin目录里,找出所有以"calc"结尾的可执行文件 #+ do if [ -x "$file" ] then echo $file fi done # /bin/ipcalc # /usr/bin/kcalc # /usr/bin/oidcalc # /usr/bin/oocalc
7.字符:
反斜杠[backslash]就是换码符[escape],为单个字符的引用机制,通过对字符的引用来改变它本来的含义。
比如:
hdfeel$ echo "\""; // 输出双引号 hdfeel$ " hdfeel$ x=abc hdfeel$ echo “$x” // 输出变量的值 hdfeel$ abc hdfeel$ echo “\$x” // 原样输出 hdfeel$ $x
8.字符:`
命令替换符,就是键盘的左上角波浪符下面的字符,不要看错了,不是单引号噢,<code>`</code>中间放一个可执行的命令<code>`</code>,这个符号也叫反引号。
举个小例子:
#! /bin/bash inFile=“example.txt" maxLen=12 # while read line; do len=`echo $line | awk '{print length($0)}'` // 子命令被放到了反引号里面执行。 if [ $len -lt $maxLen ]; then echo $line fi done < $inFile上面的程序打印出了少于12个字符的行。
9.冒号:
冒号[colon],称为空命令[null command],即什么都不执行,返回值为true,也就是0,属于Bash的内置命令。
下面2段代码把冒号当成了判断条件:
while : do operation-1 operation-2 ... operation-n done和上面的代码实现一样的功能
while true do operation-1 operation-2 ... operation-n done有时它也被用来当占位符:
if condition then : # Do nothing and branch ahead else # Or else ... take-some-action fi
冒号:也用来当作域分隔符,你在/etc/passwd和$PATH变量中可以看到它:
shells hdfeel$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin shells hdfeel$
最糟心的时,冒号这东西还可以做函数名,如果想让代码把人搞晕的话,这么搞
:() { echo "The name of this function is "$FUNCNAME" " # Why use a colon as a function name? # It's a way of obfuscating your code. } : # The name of this function is :当然在函数内部,它可以做一个占位符,这样函数就不是一个空函数了。
not_empty () { : } # Contains a : (null command), and so is not empty.
下面的这个比较实用:
{a..z} 生成字符a到z之间的所有字符,当然也可以是数字,比如:{1..9}
体会下这个代码
echo {a..z} # a b c d e f g h i j k l m n o p q r s t u v w x y z # Echoes characters between a and z. echo {0..3} # 0 1 2 3 # Echoes characters between 0 and 3. base64_charset=( {A..Z} {a..z} {0..9} + / = ) # Initializing an array, using extended brace expansion. # From vladz's "base64.sh" example script.
上面解释了一些Bash Shell中的部分特殊字符,在<a Advanced Bash-Scripting Guide中有更多、更详细的介绍,有兴趣可以参考。
原文:http://www.hdfeel.net/2015/01/bash-shell-special-character/
本文出自 “HDFeel的IT视点” 博客,请务必保留此出处http://hdfeel.blog.51cto.com/9805995/1606620
相关文章推荐
- Linux Bash Shell学习(三):基本I/O操作、特殊字符、控制键和帮助
- linux bash shell 特殊字符大全
- Shell-bash中特殊字符汇总[转]
- shell 特殊字符用例
- Shell变量名使用的特殊字符
- Linux Shell Bash 带有特殊含义的退出码
- Bash Shell 数字/字符比较大小
- Linux CentOS 7 shell中的特殊字符及与管道相关的命令(cut,sort,wc,uniq,tee,tr,split)
- bash中常见特殊字符使用大全
- bash脚本中的一些特殊字符的用法
- Shell中的一些常用特殊字符
- shell特殊字符,shell的几个命令
- 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等
- bash 替换特殊字符
- shell学习总结之特殊字符及特殊变量
- shell中的特殊字符
- bash shell提示符字符
- Shell特殊字符
- Shell命令行中特殊字符与其转义详解(去除特殊含义)
- [Linux]:Bash Shell的字符串匹配方法