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
    ---+-------------+-------------+--------------------------------------------------------------------

  • 相关阅读:
    BizTalk 2010 Adapter for mySAP Business Suite 所支持版本
    BizTalk Adapter Pack for Oracle 实现Oracle 11g的CRUD
    BizTalk 360 功能介绍 CTP版
    以小见大——那些基于 protobuf 的五花八门的 RPC(5 完)
    BizTalk Server 2010 + SQL Server 2008 R2 通过集成创造更大价值 [ 上篇 ]
    double to float
    Office 2003 PIA
    matlab传参数
    Convert.ToInt16
    矩阵转换
  • 原文地址:https://www.cnblogs.com/taowang2016/p/12794073.html
Copyright © 2011-2022 走看看