shell中的数据生命周期scope

#!/bin/sh
exit 0
#shell 中, 默认所有的变量都是 全局变量,除非主动变量前面加 local 修饰
#shell 变量是字符变量,只能放字符和数字,shell数组也是如此;而数字也是图形字符;总的来说,shell的变量是图形字符变量
#变量,函数和系统命令可以同名,先搜索脚本后系统环境

#子进程拥有父进程的环境副本,但不能影响父进程的环境;子进程能对父进程的环境有读权限.写的时候,只是在自己的副本中生效,一种写时复制的形式;脚本都是进程,函数不是;
#函数完全共享调用者的环境,并且能影响环境;函数有调用者环境的读写能力;函数完全属于自己的部分只有函数的参数列表,函数的local 局部变量;函数的返回 return ,exit 几乎是完全等效的 ;无法返回8bit以外的任何数据;只能用全局变量
# 变量分三个等级:
1.env 全局环境, export -f varname 添加 export -n varname 删除
2.父环境,调用者环境: 包含 env 调用者已经声明的,没有通过export -f 输出的变量;调用者用 local 定义的调用者生命周期内的变量,与env同名的时候也可优先使用该局部变量;
3.子环境:被调用者的环境,子进程,脚本,是父进程的环境的写时复制;函数共享调用者的环境,它们是同一个进程;函数内的local 变量:函数的参数列表,local 修饰的,是函数生命周期内有效的;source 脚本文件名,将脚本退化为函数使用,但是脚本不允许使用local;

注意:1.可以在函数内定义函数,默认不是局部函数,生命周期和变量的定义规则是一样的;inner函数也可为以在外部函数的外部调用.但是外部函数的local,这时候会没有数据;
    2.shell 中的自己定义变量没法存换行符等控制符,它们会在shell的处理过程中就被用掉
    3.shell 主要通过输入输出设备来操作;除了变量还可以使用文件,输入输出管道等非变量的数据结构,里面能存控制符;
    4.shell 中所有的命令包括 :命令名 命令变量参数 命令的数据输入输出流控制参数

流控制命令 exec 常规命令名 命令变量参数 命令的数据输入输出流控制参数
文件描述符与网络socket挂接
exec 8<> /dev/tcp/www.baidu.com/80

文件是IO设备是输入输出流设备
流与数据控制命令:
        输入流从变量获取数据:   0<<<$varname
        输入流从变量获取数据:   0<&$varname     ; 0<&$1
        输入流文件描述符获取数据:   0<&8    ;
        关闭输入流挂接,输入流现在为标准输入设备:  0<&-
        
        输出流与文件挂接: 2>&1  1>/filename
        输出流与文件挂接: >&  /filename
        输出流与文件挂接: &>  /filename

原文地址:https://www.cnblogs.com/jf001/p/10256815.html

时间: 01-11

shell中的数据生命周期scope的相关文章

Spring容器中Bean的生命周期

日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此,闲言少叙,书归正传,上图先: 步骤很多,切莫惊慌,我们可以把上面的步骤归纳如下: 1-2:创建实例: 现在假设spring就是个容器,而配置文件中配置的bean属性才是我们真正需要的东西.创建实例就是说,我把配置文件中的bean信息取出来化作一个真正的bean并放到容器中. 3-4:注入依赖关系:

4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别

 事务提交过程 事务 基本概念 概念:一个或者多个DML语言组成 特点:要么都成功,要么都失败 事务的隔离性:多个客户端同时操作数据库的时候,要隔离它们的操作, 否则出现:脏读  不可重复读  幻读 Oracle默认情况下,事务是打开的 commit案例: SQL> create table t1(tid int,tname varchar2(20)); 表已创建. SQL> select * from tab; TNAME                          TABTYPE

Spring中Bean的生命周期

Spring中Bean的生命周期过程: 1.Spring对Bean进行实例化(相当于程序中的new Xx()) 2.Spring将值和Bean的引用注入进Bean对应的属性中 3如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法 (实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有在Bean的ID的) 4.如果Bean实现了BeanFactoryAware接口,Spring将调用se

android中 activity的生命周期

activity的生命周期: 1 : onCreate() --活动第一次被创建时调用,应该在这方法中完成活动初始化操作,如:加载布局,绑定事件 2 : onStart() --活动由不可见变为可见的时候调用 3 : onResume() --活动准备好和用户进行交互的时候调用,此时活动一定位于栈顶,处于运行状态 4 : onPause() --系统准备去启动或者恢复另一个活动的时候调用,通常可以在这个方法中将消耗CPU的资源释放掉 保存一些关键数据,但这个方法执行速度一定要快,不然会影响新的栈

Android中Activity的生命周期

protected void onCreate(Bundle savedInstanceState):当Activity的实例被启动是调用的第一个方法. protected void onStart():该方法在onCreate()方法被调用,或者在Activity从Stop状态转为Actived的状态时调用. protected void onResume():在Activity从Paused状态转到Actived状态时被调用. protected void onPaused():在Activ

IOC容器中bean的生命周期

一.Bean生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的引用 调用Bean的初始化方法 Bean可以使用了 当容器关闭时,调用Bean的销毁方法 在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法. 下面通过示例

Java中的各种生命周期

Servlet生命周期 在一个servlet第一次被请求的时候,servlet就会被实例化,该实例会一直驻留在内存内,以便响应后续的其他请求!(如果在servlet的配置中添加了load-on-startup,就会在服务器启动的时候直接实例化servlet) 在servlet实例化以后,就会立即调用init()方法,该方法在整个生命周期之间只会调用一次. 在每次请求servlet的时候,都会调用service()方法(回调doGet,doPost) 在web应用即将被卸载的时候,就会调用dest

Spring中Bean的生命周期方法

Bean的生命周期方法 src\dayday\Car.java package dayday; import com.sun.org.apache.xpath.internal.SourceTree; import javax.sound.midi.Soundbank; /** * Created by I am master on 2016/11/28. */public class Car { private String name; public void setName(String n

18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用

?? 1 绑定服务(本地的方式),要做如下的案例: 操作步骤:"先点击绑定服务",再点击"调用服务里面的方法",然后查看服务的执行情况. 2编写Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" pack

好记性不如烂笔头86-spring3学习(7)-ApplicationContext中bean的生命周期

假设使用ApplicationContext来生成.管理Bean, 一个Bean从建立到销毁,会历经几个运行阶段. 我个人理解一般的bean的生命周期主要包含:建立,初始化,使用阶段,销毁四个核心阶段.使用ApplicationContext 和BeanFactory对bean的生命周期来看,宏观上基本同样,微观上有一些差异. 假设使用ApplicationContext来生成并管理Bean.在运行BeanfactoryAware的 setBeanFactory()阶段之后.若Bean类上有实现