在命令行上设置环境变量并使其影响两个命令

在命令行上设置环境变量并使其影响两个命令

该命令按预期工作

> TEST=`uuidgen` sh -c 'echo "$TEST"'
BE6DFB7B-D872-49D7-91E6-24D01644B0A2
> echo $TEST
[empty line]

TEST在命令行上本地设置变量,并通过 echo 命令进行回显。该行执行后,TEST不再设置。

然而这

> TEST=`uuidgen` sh -c 'echo "$TEST"' && sh -c 'echo "$TEST"'                                          
52EFFEAA-D094-4FC3-8212-6A294918E265
[empty line]

为第一个命令设置了TEST变量,但没有为&&.我希望将其设置为两个都命令。实现这一目标的最佳方法是什么?

答案1

您可以使用相同的 shell 运行这两个命令:

TEST=`uuidgen` sh -c 'echo "$TEST" && echo "$TEST"'

答案2

如果你希望变量分配是临时的(即仅用于一个命令),然后在单独的行上进行分配。

不同类型变量赋值的一些示例:

  1. TEST=foo echo "$TEST"
    

    这会暂时地将值foo赋给变量TEST(暂时导出 TEST) 为仅有的那个单一的echo命令。之后,它恢复到之前的任何值(和导出状态) - 如果没有值则取消设置。

  2. TEST=foo
    echo "$TEST"
    NEWTEST="$TEST"
    

    在此示例中,TEST 具有该值,foo直到 shell 退出(例如注销或脚本结束),或者显式取消设置它,或者分配新值,因此 NEWTEST 最终具有与 TEST 相同的值 (foo)。

    TEST 未导出,因此在从此 shell 执行的程序环境中不可用。

  3. 如果您希望该变量在执行程序的环境中可用,则需要将其导出。

    例如

    export TEST=foo
    

    或者:

    TEST=foo
    export TEST
    

答案3

用于为整个 shell 会话export TEST=bla设置变量。TEST

$ export TEST="coincoin"
$ echo $TEST
coincoin
$ cat test.sh 
#!/bin/bash

echo "Test is ${TEST}"
$ ./test.sh 
Test is coincoin

相关内容