一、变量的定义,中间没有空格
a=1
b="123"
变量的引用,多数情况下可以去掉{},{}用于区分变量的边界。
${a}
${b}
#举例
num=2
echo "this is the $numnd" #this is the //因为没有定义变量,找不到变量边界
echo "this is the ${num}nd" #this is the 2nd
字符串中对变量的引用
#如果在某个字符传中引用已定义的变量,此字符串必须是双引号hell="123${a}"
#!/bin/bash
url="http://c.biancheng.net"
website1='C语言中文网:${url}'
website2="C语言中文网:${url}"
echo $website1
echo $website2
运行结果:
C语言中文网:${url}
C语言中文网:http://c.biancheng.net
总结
单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。
双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。
shell中所有的类型默认都是字符串类型,所以不手工指定变量类型是不能进行数值运算,注意这里指的是数值运算,具体如何数值运算,参见:
https://blog.mimvp.com/article/5994.html
二、反引号(``)
# echo The date and time is `date`
The date and time is 三 6月 15 06:10:35 CST 2005
# echo Your current working directory is $(pwd)
Your current working directory is /home/howard/script.
总结
shell能够将一个命令的标准输出插在一个命令行中任何位置
shell中有两种方法作命令替换:把shell命令用反引号/或者$(...)结构括起来,其中$(...)格式受到POSIX标准支持,也利于嵌套。
三、加不加分号的区别
#单行语句一般要用到分号来区分代码块,例如
if [ "$PS1" ]; then echo test is ok; fi
test is ok
/#该代码若写作多行,用换行符来区分代码块,则无需用到分号
if [ "PS1" ]
then echo "test is ok"
fi
四、shell中echo单引号,双引号,不加引号的区别
https://www.cnblogs.com/dazhuwang/p/13203248.html
#声明变量 VAR01 并用echo打印出来,第一次直接打印,第二次用双引号括起来,从内容看好像没什么区别
[root@localhost ~]# VAR01=100
[root@localhost ~]# echo $VAR01
100
[root@localhost ~]# echo "$VAR01"
100
#声明变量 VAR02 内容为字符串,ABC 之间有多个空格
[root@localhost ~]# VAR02="A B C"
#直接打印变量时,输出内容只保留了每个字幕间一个空格
[root@localhost ~]# echo $VAR02
A B C
#使用双引号括起的输出内容和变量定义时的内容是完全一致的
[root@localhost ~]# echo "$VAR02"
A B C
总结
单引号:所见即所得,即将单引号内的内容原样输出,任何字符都只会当成普通字符,除了单引号本身。
双引号:把双引号内的内容输出出来,如果内容中有命令,变量等,会先把变量,命令解析出结果,然后再输出最终内容来。
无引号:把内容输出出来,但可能不会将含有空格的字符串视为一个整体输出,如果内容中有命令,变量等,会先把变量,命令解析结果,然后再输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用,不过最好用双引号替代之。