zoukankan      html  css  js  c++  java
  • linux-如何在bash -c命令中插入变量

    “ bash”命令启动一个子进程,其父进程是您当前的bash会话.

    要在父进程中定义变量并在子进程中使用它,必须将其导出.

    先看一个简单例子:
    $FOO="text"
    $echo $FOO
    $text

    $FOO="text"
    $bash -c 'echo $FOO'
    $# return nothing


    $export FOO="text"
    $bash -c 'echo $FOO'

    要点:
    1、 Subshells will have access to all variables from the parent, regardless of their exported state.
    2、 Subprocesses will only see the exported variables.
    What is common in these two constructs is that neither can pass variables back to the parent shell.
    看下面的例子。
    $ noexport=noexport; export export=export; (echo subshell: $noexport $export; subshell=subshell); bash -c 'echo subprocess: $noexport $export; subprocess=subprocess'; echo parent: $subshell $subprocess
    subshell: noexport export
    subprocess: export
    parent:
    $ noexport=noexport; export export=export; exec bash -c 'echo execd process: $noexport $export; execd=execd'; echo parent: $execd
    execd process: export

    上面解释的很清楚了,再来看下面的一个例子和解释:
    如果我们创建一个普通变量和一个数组变量,
    a=apple # a simple variable
    arr=(apple) # an indexed array with a single element

    and then echo the expression in the second column, we would get the result / behavior shown in the third column. The fourth column explains the behavior.

    | Expression | Result(echo) | Comments

    ---+-------------+-------------+--------------------------------------------------------------------
    1 | "$a" | apple | variables are expanded inside ""
    2 | '$a' | $a | variables are not expanded inside ''
    3 | "'$a'" | 'apple' | '' has no special meaning inside ""
    4 | '"$a"' | "$a" | "" is treated literally inside ''
    5 | ''' | invalid | can not escape a ' within ''; use "'" or $''' (ANSI-C quoting)
    6 | "red$arocks"| red | $arocks does not expand $a; use ${a}rocks to preserve $a
    7 | "redapple$" | redapple$ | $ followed by no variable name evaluates to $
    8 | '"' | " | has no special meaning inside ''
    9 | "'" | ' | ' is interpreted inside "" but has no significance for '
    10 | """ | " | " is interpreted inside ""
    11 | "*" | * | glob does not work inside "" or ''
    12 | " " | | and have no special meaning inside "" or ''; use ANSI-C quoting
    13 | "echo hi" | hi | and $() are evaluated inside "" 14 | '`echo hi`' | `echo hi` | and $() are not evaluated inside ''
    15 | '${arr[0]}' | ${arr[0]} | array access not possible inside ''
    16 | "${arr[0]}" | apple | array access works inside ""
    17 | $'$a'' | $a' | single quotes can be escaped inside ANSI-C quoting
    18 | "$' '" | $' ' | ANSI-C quoting is not interpreted inside ""
    19 | '!cmd' | !cmd | history expansion character '!' is ignored inside ''
    20 | "!cmd" | cmd args | expands to the most recent command matching "cmd"
    21 | $'!cmd' | !cmd | history expansion character '!' is ignored inside ANSI-C quotes
    ---+-------------+-------------+--------------------------------------------------------------------

  • 相关阅读:
    poj 1698 二分图多重匹配
    poj 3207 2-sat
    hdu4932 Miaomiao's Geometry
    hdu4924 Football Manager
    hdu4914 Linear recursive sequence
    hdoj4906 Our happy ending(2014 Multi-University Training Contest 4)
    poj1987 Distance Statistics
    poj3342 Party at Hali-Bula
    C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法
    poj1947 Rebuilding Roads
  • 原文地址:https://www.cnblogs.com/taowang2016/p/12794073.html
Copyright © 2011-2022 走看看