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

  • 相关阅读:
    iframe中的页面如何触发父页面事件
    js获取gridview的值
    不出现重复数字,带干扰的验证码
    文本框内不允许输入字母
    后台调用前台JS方法
    在后台得到前台元素,给元素改变属性值或添加属性
    C#常见面试题
    Flex代码生成器 (FCG)
    c#(WinForm)遍历局域网计算机(电脑)获取IP和计算机名称
    VisualSVN Server + Tortoise SVN 使用教程(补充版)
  • 原文地址:https://www.cnblogs.com/jf001/p/10256815.html
Copyright © 2011-2022 走看看