将环境变量传递给 bash 中的命令

将环境变量传递给 bash 中的命令

我有这个示例 bash 命令:

FILE='/tmp/1.txt' echo "file: $FILE"

输出是:

file:

为什么输出不包含先前定义的变量 FILE?

答案1

当你跑步时

FILE='/tmp/1.txt' echo "file: $FILE"

shell 在执行赋值之前扩展 $FILE 变量,因此假设之前未设置 FILE,您将得到:

FILE='/tmp/1.txt' echo "file: "

您可以通过首先将 FILE 设置为已知值来确认此行为:

FILE="foo"
FILE='/tmp/1.txt' echo "file: $FILE"

第二行扩展为:

FILE='/tmp/1.txt' echo "file: foo"

然后,在此命令的上下文中,FILE 的值更改为/tmp/1.txt。然后shell执行echo "file: foo"

正如 @admstg 在他的回复中提到的,你可以这样做:

FILE='/tmp/1.txt'; echo "file: $FILE"

但这种行为与您最初尝试的不同。您最初仅在 echo 命令期间设置 FILE ;上面的代码在 shell 的持续时间内设置它(或者直到它被明确取消设置)。

答案2

您应该用 ; 分隔这两个命令。为了定义变量然后通过调用它。

当您在同一 shell 中调用该变量时,您不需要导出该变量。

这应该有效:

FILE='/tmp/TEST.txt' ;  echo "file : $FILE"

相关内容