zoukankan      html  css  js  c++  java
  • [转]shell 变量的作用域

    转自 http://c.biancheng.net/view/773.html

    函数中的变量是全局变量,作用域是当前进程。其他文件中的函数中的变量在 source该文件后也能访问。

    除非加local

    下面的例子中第一次echo 没输出zym1和zym2的值,第二次的echo可以输出。因为第一次执行 a=$(test1)时,shell中 $( ) 会通过subshell来执行,即fork一个新的进程来执行。所以这边得不到值。

    fork新的进程时,父进程的文件描述符(标准输出、输入、错误)也被子进程copy了一份

    父进程     子进程

    0                0        stdin 

    3              1      stdout   

    2               2    stderr

    1

    子进程的stdin和stderr继承了父进程的stdin和stderr,而子进程的stdout被父进程捕获,对应到文件描述符3,所以在子进程中若echo打印log 在终端会输出,用 

    但是把这个log 用 >&2 重定向到标准出错,就可以在当前终端打印出来了。

    function test1()
    {
    zym1=10
    zym2=20
    printf '%s
    ' "$zym1"
    }
    a=$(test1)
    echo "^^^^^^^^^^^^^a=$a   zym1=$zym1  zym2=$zym2"  
    
    function test2()
    {
    zym3=10
    zym4=20
    }
    test2
    echo "^^^^^^^^^^^^   zym3=$zym3  zym4=$zym4"
  • 相关阅读:
    [六省联考2017]相逢是问候
    [CQOI2017]老C的键盘
    [CQOI2017]老C的任务
    [CQOI2017]小Q的棋盘
    <sdoi2017>树点涂色
    三分法
    最长回文子串
    hdu3261
    spoj694
    poj1743
  • 原文地址:https://www.cnblogs.com/yi-mu-xi/p/11855452.html
Copyright © 2011-2022 走看看