Bash 中的特殊字符大全
通过展开, 你输入的字符,在 shell 对它起作用之前,会展开成为别的字符。如:
[SL@SL ~]$ echo *
Desktop Pic txt.save
shell 在 echo 命令被执行前把 * 展开成了当前工作目录下的文件名字。
路径名展开
通配符所依赖的工作机制叫做路径名展开。
echo * 当前目录所有非隐藏文件 echo .* 当前目录所有以.开头的文件 ls -d .* | less ls -d .[!.]?*
波浪线展开
波浪线字符(“~”)有特殊的含义。当它用在一个单词的开头时,它会展开成指定用户的家目录名,如果没有指定用户名,则展开成当前用户的家目录。
[SL@SL ~]$ echo ~ /home/SL
算术表达式展开
格式:$((expression))
echo $((2 + 2)) 4 echo $(((5**2) * 3)) 75
花括号展开
花括号表达式本身包含一个由逗号分开的字符串列表,或者一系列的整数,或者单个的字符串。这种模式不能嵌入空白字符。
echo Front-{A,B,C}-Back Front-A-Back Front-B-Back Front-C-Back echo Number_{1..5} Number_1 Number_2 Number_3 Number_4 Number_5 echo {Z..A} Z Y X W V U T S R Q P O N M L K J I H G F E D C B A echo a{A{1,2},B{3,4}}b aA1b aA2b aB3b aB4b mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
参数展开
$ 变量调用符号
用法: $变量
机制:调用变量,从而得到‘变量的值’echo $USER
命令替换
Linux命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个Linux命令的参数 echo $(ls) Desktop Documents ls-output.txt Music Pictures Public Templates Videos 也可用倒引号来代替$() ls -l `which cp` -rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
单词分割
默认情况下,单词分割机制会在单词中寻找空格,制表符,和换行符,并把它们看作 单词之间的界定符。这意味着无引用的空格,制表符和换行符都不是文本的一部分, 它们只作为分隔符使用。
echo this is a test this is a test
引用
shell 提供了一种 叫做引用的机制,来有选择地禁止不需要的展开。
“” 双引号
把它所包含的内容作为普通字符,但 $,\ (反斜杠),和 `(倒引号)除外 .
意味着单词分割,路径名展开,波浪线展开,和花括号展开都将失效,然而参数展开,算术展开,和命令替换仍然有效。” 单引号
把它所包含的内容作为普通字符,无例外
echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER text /home/me/ls-output.txt a b foo 4 SL
双引号中波浪线展开,路径名展开,花括号展开均失效,参数展开,算术展开,和命令替换仍然有效。
echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER" text ~/*.txt {a,b} foo 4 me
单引号中全部失效
echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER' text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
转义字符
字符之前加上一个反斜杠 \