代码之家  ›  专栏  ›  技术社区  ›  Ankur Agarwal

在bash中从命令行传递变量

  •  0
  • Ankur Agarwal  · 技术社区  · 7 年前

    想验证我对为什么这些情况表现不同的理解:

    #1
    $ unset SOME_VAR
    $ SOME_VAR=abcdef  echo $SOME_VAR # prints nothing
    

    我认为发生#2是因为赋值和echo在同一个shell中作为两个单独的命令运行,并且在echo执行时在shell中设置$SOMEŠVAR。

    #2
    $ unset SOME_VAR
    $ SOME_VAR=abcdef   ; echo $SOME_VAR
    abcdef
    

    我不明白为什么3会发生 .

    #3
    $ unset SOME_VAR
    $ SOME_VAR=abcdef   ./test.sh # prints abcdef 
    abcdef
    

    我认为#4的出现是因为shell脚本的赋值和执行在父shell和子shell中作为两个不同的命令执行测试.sh不继承某些\u VAR(因为没有export语句)。

    #4
    $ unset SOME_VAR
    $ SOME_VAR=abcdef   ; ./test.sh # prints nothing
    

    测试.sh包含:

    $ cat test.sh
    #!/bin/bash
    
    echo $SOME_VAR
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Mike Holt    7 年前

    例1发生的原因是变量展开首先发生。在这种情况下,事件的顺序是:

    1. 展开 $SOME_VAR (对空字符串)
    2. SOME_VAR abcdef
    3. 呼叫 echo (没有参数,因为 $SOME\u变量 扩展为空字符串)

    如您所说,发生示例2是因为命令是单独运行的。

    一些 abcdef ./test.sh ,是环境的一部分 VAR=value command . 你想要吗 command 能够使用 VAR ,但您不一定希望所有其他命令或子shell都能看到它。

    一些 是当前shell中的局部变量,但尚未 export

    示例5将是:

    unset SOME_VAR
    export SOME_VAR=abcdef ; ./test.sh # prints abcdef