zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    svn hooks post-commit钩子自动部署
    curl post数据
    php 操作提示框
    php分页类 可直接调用
    微信web端生成支付二维码
    php 数据库类
    虚拟机中的CentOS 7设置固定IP连接最理想的配置
    多并发时支付如何保持账户余额的一致性?
    Spring核心机制:依赖注入
    .net 系列:并发编程之一【并发编程的初步理论】
  • 原文地址:https://www.cnblogs.com/jf001/p/10256815.html
Copyright © 2011-2022 走看看