shell中定义变量用双引号和单引号以及不用引号的区别
1. 单引号
使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出
2. 双引号
如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双引号中的变量名以及命令原样子输出。
3. 不使用引号
用于一些简单字符数字的定义与双引号类似
使用规则 | 解释 |
---|---|
单引号 | 所见即所得,即输出时会将单引号内的所有內容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,这称为强引用 |
双引号 (默认) | 输出双引号内的所有内容;如果内容中有命令(要反引下)、变量、特殊转义符等,会先把变量、命令、转义字符解析出结果,然后再输出最终内容,推荐使用,这称为弱引用 |
无引号 | 赋值时,如果变量内容中有空格,则会造成赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体来输出;如果内容中有命令(要反引下)、变量等,则会先把变量、命令解析出结果,然后输出最终内容;如果字符串中带有空格等特殊字符,则有可能无法完整地输出,因此需要双引号替代无引号的情况,特别是对变量赋值时改加双引号。一般连续的字符串、数字、路径等可以不加任何引号进行赋值和输输出,不过最好是用用 |
反引号 | 一般用于引用命令,执行的时候命令会被执行,相当于S0,赋值和输出都要用“将命令引起来 |
例如
a= demo b='b- $a' c="b- $a" echo $a echo $b echo $c
结果:
demo b- $a b- demo
建议:
1、简单变量,简单赋值可以不用""
2.脚本中声明变量最好用""
3. 原样子输出用''
4.执行命令赋值最好用$()或者``