Linux之shell变量

1、本地变量

当前bash有效,新开一个窗口【新的bash】无效;

2、位置变量

$1,$2
比如:
shell_eg.sh中的内容如下


1.png

执行shell_eg.sh
source shell_eg.sh a b
返回

2.png

上面的命令中$1 指向第一个a,$2指向第二个b。
将shell_eg.sh中的内容修改为


3.png

执行shell_eg.sh
返回

4.png

其中$12,并没有返回第十二个变量值l,而是返回了第一个变量值a再加数字2。
再看另一个例子
abc=123
echo $abcyju
并没有返回123yju,此处将abcyju整体作为变量名,不存在这个变量,返回空
5.png

如果改为
echo ${abc}yju
就可以返回123yju了
返回
6.png

所以将shell_eg.sh中的内容修改为
7.png

执行shell_eg.sh
返回 #能够返回第十二个值l
8.png

在函数里面也可以用
定义test函数,然后执行
9.png

3、环境变量

export定义环境变量
比如:shell_eg.sh中的内容为


10.png

当前bash中ccc变量不存在,执行 shell_eg.sh
返回
chmod +x shell_eg.sh
./shell_eg.sh
返回 # ccc变量不存在,返回空

11.png

在当前bash中定义ccc变量,再次执行shell_eg.sh
ccc=1010
./shell_eg.sh
返回 # ccc变量的值依旧返回空,因为可执行文件会开启一个子bash,可执行文件不像管道一样【子bash会继承父bash中的变量】,ccc=1010是当前bash的,而 shell_eg.sh在另一个bash中执行,所以返回空。

12.png

如果将ccc定义为环境变量,再执行 shell_eg.sh
export ccc
./shell_eg.sh
返回 # 子bash能够读到父bash中的环境变量ccc

13.png

注:如果重新开启一个窗口【开启一个新的bash】,在这个新的bash中无法读到ccc变量,export不能跨bash读,只能在父bash和它的子bash中读取到

4、特殊变量

$#:位置参数个数
$*:参数列表,双引号引用为一个字符串
$@:参数列表,双引号引用为单独的字符串
$$:当前shell的进程号
    $BASHPID:真实的进程号【管道中使用的时候】
$?:上一个命令退出状态【0成功;非0失败】

    比如,将shell_eg.sh修改为


14.png

    执行shell_eg.sh
    返回


15.png

    $#返回14个参数值,$*和$@都返回了参数列表。
    执行完shell_eg.sh,查看$?

    返回 # 如果$?返回0,表名上一个命令执行成功,返回非0的结果,
    表明上一个命令没有执行成功


16.png

    另外还有这种写法
    echo ${abc[*]}或者echo ${abc[@]}
    返回变量abc的参数列表


17.png

5、局部变量

如函数里面的变量,定义局部变量local 变量名
比如:
函数可以引用在当前bash定义的变量


18.png

在函数内可以定义局部变量,函数内可以输出这个变量,函数外就得不到这个变量了


19.png

在函数内定义的变量【非局部变量】,在函数外也可以得到


20.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。