环境变量
Shell进程的环境变量,可以从当前进程传给fork出来的子进程,用printenv命令显示当前进程的环境变量。
。。。
本地变量
只存在与当前Shell进程,set命令可以显示当前Shell进程中定义的所有变量和函数
定义变量、定义和导出环境变量
export VARNAME=value
可以用unset删除已定义的环境变量或本地变量
变量的引用:
变量的VARNAME,则${VARNAME}可以表示它的值。
运行结果:
命令的代换:‘或$(),建议使用$()进行替换
执行结果:
但‘和$()运行命令的方式又什么不同?
$()可以分解为两个部分,一个是$符号,另外一个是()小括号$符的作用是变量替换,即用变量的值去替换当前的内容,小括号则是开一个子shell优先去执行小括号内部的命令
在$(命令)中,命令部分的内容不会被父shell解析,而反引号的部分却会被解析,例如`\`,`$`,```???
算术代换:$(())
用于算术计算,$(())中的Shell变量取值将转换成整数,例如:
用于算术计算,$(())中的Shell变量取值将转换成整数,例如:
![](https://images2015.cnblogs.com/blog/932826/201608/932826-20160809153849637-1053530409.png)
运行结果:
$(())中只能用+-*/和()运算符,并且只能做整数运算。
转义字符:
在Shell中被用作转义字符,用于去除紧跟其后的单个字符的特殊意义(回车除外),换句话说,紧跟其后的字符取字面值。
创建一个文件名为“$ $”(中间有空格)的文件可以这样: $ touch $ $
创建一个文件名为“$ $”(中间有空格)的文件可以这样: $ touch $ $
单引号:(保持引号内的所有字符都是字面值,字符串中不能出现单引号)
双引号:(保持引号内所有字符的字面值)(但以下情况除外)
$加变量名可以取变量的值
反引号仍表示命令替换
$表示$的字示值
\`表示`的字示值
"表示"的字示值
\表示的字示值 除以上情况之外,在其它字符前面的无特殊含义,只表示字面值:
eval 命令:
告知shell取出eval的参数,重新运算求出参数的内容。eval可读取一连串的参数,然后再依参数本身的特性来执行。参数不限数目,彼此之间用分号分开。
1、eval命令也可以用于回显简单变量,不一定是复杂变量
2、 执行含有字符串的命令
test.txt内容:hello shell world!
myfile="cat test.txt"
(1)echo $myfile
cat test.txt
(2)eval echo $myfile
hello shell world!
从(2)可以知道第一次扫描进行了变量替换,第二次扫描执行了该字符串中所包含的命令:
3、命令还可以用来显示出传递给脚本的最后一个参数
4、给每个值一个变量名