1.单引号和双引号的区别
str=yalong
echo "The str is $str" >> The str is yalong #双引号中的$str被其值yalong替换,即双引号允许变量替换。
echo 'The str is $str' >> The str is $str #单引号中的内容被原样输出,即单引号不允许变量替换。
总结:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号里可以有变量,允许变量替换
双引号里可以出现转义字符
-bash-4.1$ var1='hello world'
-bash-4.1$ var2='$var1'
-bash-4.1$ echo $var2
$var1
-bash-4.1$ var2="$var1"
-bash-4.1$ echo $var2
hello world
-bash-4.1$ var3="\"WE\" ARE THE WORLD"
-bash-4.1$ echo $var3
"WE" ARE THE WORLD
-bash-4.1$ var4='\"WE\" ARE THE WORLD'
-bash-4.1$ echo $var3
"WE" ARE THE WORLD
-bash-4.1$ var4='\'WE\' ARE THE WORLD'
> ^C
-bash-4.1$
2.不用引号和用引号(单引号或者双引号)的区别
[robot@hadoop103 ~]$ A=HELLO WORLD
bash: WORLD: command not found...
[robot@hadoop103 ~]$ A='HELLO WORLD'
[robot@hadoop103 ~]$ echo $A
HELLO WORLD
[robot@hadoop103 ~]$ A=HELLO \t world
bash: t: command not found...
[robot@hadoop103 ~]$ A='hello \t world'
[robot@hadoop103 ~]$ echo $A
hello \t world
[robot@hadoop103 ~]$ A="hello \t world"
[robot@hadoop103 ~]$ echo $A
hello \t world
总结:定义变量时,若等号右侧的字符串中含有空格或者制表符,换行符时,要用引号将打算赋值的字符串括起,否则报错。
关于转义字符\的使用:
echo "hello world" >> hello world #这里面双引号就是双引号,不输出
echo \"hello world\" >> "hello world" #输出双引号,这里用了转义字符\所以双引号失去了引号功能,成了字符串。
3.反引号的使用``,执行里面的命令
[robot@hadoop103 ~]$ echo aa=`date +%H` #这里用的是反转义字符,esc下面的那个符号。
aa=23
[robot@hadoop103 ~]$ echo aa="date+%H" #这里用的是双引号,命令失效。
aa=date+%H
A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号
A=`pwd` & echo $A
A=$(pwd) $ echo $A
————————————————