该命令按预期工作
> 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
如果你不希望变量分配是临时的(即仅用于一个命令),然后在单独的行上进行分配。
不同类型变量赋值的一些示例:
TEST=foo echo "$TEST"
这会暂时地将值
foo
赋给变量TEST
(和暂时导出 TEST) 为仅有的那个单一的echo
命令。之后,它恢复到之前的任何值(和导出状态) - 如果没有值则取消设置。TEST=foo echo "$TEST" NEWTEST="$TEST"
在此示例中,TEST 具有该值,
foo
直到 shell 退出(例如注销或脚本结束),或者显式取消设置它,或者分配新值,因此 NEWTEST 最终具有与 TEST 相同的值 (foo)。TEST 未导出,因此在从此 shell 执行的程序环境中不可用。
如果您希望该变量在执行程序的环境中可用,则需要将其导出。
例如
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