shell中奇葩写法不仅仅是(.)、{.}、((.))等等写法,还有各种奇怪的写法和细节需要注意,一个不留神就发现结果和预期不一样
首先我们演示一个基本的
1 | a = "b" |
结果是什么都没打印,正确写法是=
两边没有空格a="b"
认识到shell中的奇葩写法后,需要对各种写法有个基本的认识
- 不加括号,正常的取值方式,但是在引号中不好使。
- 单引号。原样输出,但仍然会解析\${var}
- 双引号。会解析\${var} 、\$var和命令\$(expr)
- \${}。取值操作
- 反引号`。当作命令执行
- \$()。括号中的内容当做命令执行
然后我们再来看下这些写法的使用情况
1 | i=i |
再来一个同时有单引号和双引号的,这里就不能用\$ds了,只能用\${ds}
1 | echo "insert overwrite table table_name partition (ds='${ds}') select distinct name from table_name_pre where ds='${ds}';" |
$变量说明:$$
Shell本身的PID(ProcessID)$!
Shell最后运行的后台Process的PID$?
最后运行的命令的结束代码(返回值)$-
使用Set命令设定的Flag一览$*
所有参数列表。如”$*”用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。$@
所有参数列表。如”$@”用「”」括起来的情况、以”$1” “$2” … “$n” 的形式输出所有参数。$#
添加到Shell的参数个数$0
Shell本身的文件名$1 ~ $n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
示例:
1 | printf "The complete list is %s\n" "$$" |
执行结果:
1 | > sh params.sh 123456 QQ |