Shell变量相关
li@ubuntu:~/test$ vi test.sh li@ubuntu:~/test$ cat test.sh #!/bin/bash #shell变量不加引号;加单引号;加双引号都行 url=www.baidu.com echo $url name='百度网' echo $name author="百度" echo $author author="Nichols" echo ${author} #单引号和双引号的区别 url="www.qq.com" website1='腾讯网:${url}' website2="腾讯网:${url}" echo $website1 echo $website2 li@ubuntu:~/test$ ./test.sh www.baidu.com 百度网 百度 Nichols 腾讯网:${url} 腾讯网:www.qq.com li@ubuntu:~/test$
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
li@ubuntu:~/test$ vi t.sh li@ubuntu:~/test$ cat t.sh #!/bin/bash #只读变量 myName="Nicholas" readonly myName myName="Nicholafs" li@ubuntu:~/test$ /bin/sh t.sh t.sh: 6: t.sh: myName: is read only li@ubuntu:~/test$
删除变量
变量被删除后不能再次使用;unset 命令不能删除只读变量。
li@ubuntu:~/test$ vi t.sh li@ubuntu:~/test$ cat t.sh #!/bin/bash #删除变量 myName="Nicholas" myYear="18" unset myName echo $myName echo $myYear li@ubuntu:~/test$ ./t.sh 18 li@ubuntu:~/test$
补:
以单引号' '
包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行