十三、Shell篇——变量赋值、引用、作用范围

变量的定义

变量名的命名规则
 - 字母、数字、下划线
 - 不以数字开头

变量的赋值

为变量赋值的过程,称为变量替换
 变量名=变量值
  - a=123
 使用let为变量赋值
  - let a=10+20
 将命令赋值给变量
  - l=ls
 将命令结果赋值给变量,使用$ () 或者"
 变量值有空格等特殊字符可以包含在””或”中
 

 (1)将命令结果赋值给变量,使用$ () 或者"

[email protected] ~ % cmd1=`ls test/`
[email protected] ~ % cmd2=$(ls test/)
[email protected] ~ % echo $cmd1
a.txt
aa.sh
b.txt
c.txt
d.txt
e.txt
[email protected] ~ % echo $cmd2
a.txt
aa.sh
b.txt
c.txt
d.txt
e.txt

(2)变量值有空格等特殊字符可以包含在””或”中

[email protected] ~ % str="hello bash"
[email protected] ~ % echo $str
hello bash

变量的引用

变量的引用
 \${变量}称作对变量的引用
 echo \${变量名}查看变量的值
 \${变量名}在部分情况下可以省略为 $变量名
(1)当需要在变量后面加内容时,需要使用echo ${变量名}

[email protected] ~ % str="hello bash"
[email protected] ~ % echo $str
hello bash
[email protected] ~ % str="hello bash"
[email protected] ~ % echo $str
hello bash
[email protected] ~ % echo ${str}
hello bash
# 当需要在变量后面加内容时,需要使用echo ${变量名}
[email protected] ~ % echo $str123
[email protected] ~ % echo ${str}123
hello bash123

变量的作用范围

变量的默认作用范围
变量的导出
 export
变量的删除
 unset

(1)子进程无法访问父进程的变量

# 在父进程定义了变量a
[email protected] ~ % a=1
# 进入一个子进程,访问父进程的变量a,访问不到
[email protected] ~ % bash
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ echo $a
bash-3.2$ a=2
bash-3.2$ exit
exit
# 在父进程访问变量a,访问的是父进程定义的,非子进程定义的
[email protected] ~ % echo $a
1

(2)变量的导出

# 在父进程定义了变量a
[email protected] ~ % a=1
# 定义一个可执行文件,内容如下:
[email protected] test % ls -l aa.sh
-rwxr--r--  1 user1  staff  20  4  4 18:44 aa.sh
[email protected] test % cat aa.sh
#!/bin/bash
echo $a
# 在子进程中执行aa.sh,发现获取不到变量值
[email protected] test % bash aa.sh

[email protected] test % ./aa.sh

# 在父进程中执行,能够拿到变量值
[email protected] test % source aa.sh
1
[email protected] test % . ./aa.sh
1
# 使用export将变量导出,子进程就能获取到变量值
[email protected] test % export a
[email protected] test % bash aa.sh
1

原文地址:https://blog.51cto.com/12936780/2485130

时间: 2024-10-08 07:34:45

十三、Shell篇——变量赋值、引用、作用范围的相关文章

Linux Shell编程变量赋值和引用

我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/sh ... 注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似. 符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh.编辑结束并保存后,如果要执行该脚本,必须先使其可执行: chmod +x filename 此后在该脚本所在目录下,输入 ./filename 即可

Vim 中的变量赋值、引用与作用域

使用 let 进行变量赋值,echo 打印变量的值, unlet 销毁变量. 对于 Vim 选项还可用 set 来更方便地操作,比如 set {option}, set no{option}, set {option}?. 普通变量可以直接引用,环境变量要加前缀 $.寄存器变量要加前缀 @.Vim 选项要加前缀 &. 变量默认作用域取决于定义的位置,函数内则为函数作用域,外部则为全局变量. 赋值和引用变量时可以使用 b:,g:,l:,t: 等前缀来指定要操作哪个作用域的变量. 和其他编程语言一样

shell中变量被定义为星号(*)后无法引用的问题

在编写shell脚本的过程中,有的时候难免会用到一些变量值被定义为(*)的变量,但是当我们试图引用这个变量的时候bash有默认会把(*)替换成当前目录下的所有文件名的列表,如下: [[email protected]_102 ~]# a=* [[email protected]_102 ~]# echo $a anaconda-ks.cfg install.log install.log.syslog [[email protected]_102 ~]# ls  anaconda-ks.cfg 

第六章 shell学习之变量和引用

变量 本地变量:类似于局部变量,只在当前shell进程有效 环境变量:适用于所有登录进程所产生的子进程 位置参数:用于向shell脚本传递参数,只读 变量替换和赋值 引用变量值就称为变量替换,$就为变量替换符号,如a为变量名则$a或${a}为变量值 将值赋给某个变量名就称为变量赋值,格式:variable=value或${ variable=value },如值中包含空格则必须用"" 清除变量的值: unset 变量名 设置只读变量: variable=value readonly v

shell变量赋值与环境

shell变量赋值与环境 今天,跟着架构师(凡爷)搞了一个代码量统计的脚本,我学到了以下几条: 1)命令在脚本里,只是字符串,较长的命令可以改为变量,引用去执行 2)潜意识我想到if,添加语句块,而凡爷却想到了grep -v,节省了一大段代码 3)echo '' > stat 他自然而然地加上这一行,让output按不同区块相隔开,结构清晰 4)他定位问题精准而快速,很是钦佩 今晚关于shell变量,我做了很多测试,将其整理如下,以便温故而知新. #赋值# # hours_per_day=24 

【Linux】shell编程之给变量赋值的五种方法

1.  Shell中的变量类型 Shell中的变量可以分为环境变量.位置变量.预定义的特殊变量以及用户自定义变量. <!--[if !supportLists]-->2.  <!--[endif]-->环境变量 Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名.部分系统变量的值由系统设定,部分环境变量的值可以由用户给定. 环境变量的名称由大写字母组成,常用的Shell环境变量如下所示: HOME: 用户主目录的全路径名,cd $

shell 的特性:命令行展开,变量赋值,以及文件层次标准(history)

bash默认会保存以前执行过的命令列表 当前shell的进程保存在缓冲区中 缓冲区中的命令会在shell退出后保存在文件中    .bash history 使用上下箭头可以翻看此前执行过的命令 history: !数字  :  执行history中第数字条命令 !!   :  上一条命令 !-数字:表示执行命令列表中的倒数第数字条命令 ESC .  : 执行上个命令的最后参数 ! string:执行命令列表中最后一个以string开头的命令 - d :删除第数字条记录 -c:清空history

变量赋值(非引用) php内核的实现(三)

<?php $a=1; $b=&a; $c=2; $d=$c; $c=$b; 结论: 保存左值的指针,为内存回收做准备,同时该指针会被再次赋值 1)左值不是一个引用 1.1)如果左值 refcount_gc为1,说明左值被赋过值, 1.1.1)右值为引用 ,进入第2步 1.1.2)右值不是引用,refcount_gc加1,将右值拷贝给左值 1.2)如果不为1,说明第一次出现,或者被别的变量共同使用了 zval, 其refcount_gc减1 ,将左值GC buffer中 (由GC判断是否需要

PHP变量引用赋值与变量赋值变量的区别

变量默认总是传值赋值.那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量.这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量.有关这种类型的赋值操作,请参阅表达式一章. <?php $foo='abc'; $b=$foo; $b="my name is $b"; echo "$b"; //my name is abc echo "$foo"; // abc PHP