引号
-
单引号 v.s. 双引号
单引号不进行变量替换,双引号会进行变量替换 -
变量是否加引号
一个保险的做法是变量总是加引号, 因为变量的值有可能带空格
[[ ]]内会把变量替换后的值当成一个整体,但[ ]不会
[ ] 和 [[ ]]
- [ 等于 test, 是一个程序,会把] 当成参数列表里最后一个参数
- [[ ]] 是bash specific的,是bash关键字。
- [ -f “a.txt” ] && [ -f "b.txt ] 中的&&是连接两个命令的运算符;[[ -f “a.txt” && -f “b.txt” ]] 中的&&是逻辑运算符
- [[ ]] 内变量替换后如有空格也会被当成一个整体
- [[ ]] 内() 和 >, < 不用转义,而[ ]内需要,因为[ 是命令,< 对于它来说是重定向符号
[]和[[]]的区别
比较运算符
- 对于数值比较(把123当成值而不是当成字符串),不管是[ ] 还是 [[ ]] 一律是 -eq -lt, -gt这一套;在(( ))里,和C语言一致。
- 在[ ] 和 [[ ]] 里,<, >, =,== 都是字符串比较; ==是bash specific,=是shell标准