shell中单引号,双引号,反引号,不用引号的使用区别

 shell定义字符串变量时字符串可以用单引号,也可以用双引号,也可以不用引号,如果无特殊情况话,三者效果一样

 1.单引号和双引号的区别

   str=yalong
  echo "The str is $str" >>  The str is yalong #双引号中的$str被其值yalong替换,即双引号允许变量替换。

  echo 'The str is $str'  >>  The str is $str #单引号中的内容被原样输出,即单引号不允许变量替换。

 总结:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

           单引号字串中不能出现单引号(对单引号使用转义符后也不行)

          双引号里可以有变量,允许变量替换
          双引号里可以出现转义字符

 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

你可能感兴趣的:(shell编程)