-----------------------------------------------------------------Sun-------------------------------------------------------------------
一、引用变量
在一个双引号中通过直接使用变量名的方法来引用变量,一般情况下都是没问题的。这么做将
阻止所有在引号中的特殊字符被重新解释(即都被当作普通的字符串),包括变量名,但是 $
、`(后置引用)
和 "\"(转义符)除外。保留 $ 作为特殊字符的意义是为了能够在双引号中也能够正常的引用变量("$variable")。
使用双引号还能够阻止单词分割,即使这个参数包含有空白,单词也不会被分隔开。如 variable1="a variable containing five words"
#!/bin/bash
var="(]\\{}\$\""
echo $var
echo "$var"
IFS='\'
echo $var
echo "$var"
echo '$var'
结果为: (]\{}$"
(]\{}$"
(] {}$" // \字符被空白符替换了!!!
(]\{}$" // 用了双引号的则没有!
$var // 单引号不允许引用变量
IFS(Internal Field Seperator)在Linux的shell中预设的分隔符。设置了bash内置变量IFS
后,再使用echo
输出时,会将所设定的
字符用空格去代替。
二、转义
转义是一种引用单个字符的方法。一个前面放上转义符(\)的字符就是告诉shell 这个字符按照字面的意思进行解释,换句话
说,就是这个字符失去了它的特殊含义。
符号 | 说明 |
---|---|
\n | 表示新的一行 |
\r | 表示回车 |
\t | 表示水平制表符 |
\v | 表示垂直制表符 |
\b | 表示后退符 |
\a | 表示"alert"(蜂鸣或者闪烁) |
\0xx | 转换为八进制的ASCII码, 等价于0xx |
\" | 表示引号字面的意思 |
echo "\"hello\",he said."
echo "\$var"
echo "\\"
结果: "hello",he said.
$var
\
#!/bin/bash # -e 打印转义符
echo "\v\v\v\v" # \v\v\v\v
echo -e "\v\v\v\v" #竖直制表符
echo -e "\042" # " 8进制的ASCII下,42是 "
echo $'\n' # \n
echo $'\t \042 \t' # "
echo $'\t \x22 \t' # "
效果如图。
1.赋值给变量的字符串的元素也会被转义,但是不能把一个单独的转义符赋值给变量。
2.转义一个空格会阻止命令行参数列表的“单词分割”问题。
3.转义符也提供续行功能,也就是编写多行命令的功能。
每一个单独行都包含一个不同的命令,但是每行结尾的转义符都会转义换行符,这样下一行会与上一行一起形成一个命令序列