将 env 变量传递给 bash 中的命令

Kos*_*sak 5 bash

我有这个示例 bash 命令:

FILE='/tmp/1.txt' echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)

输出是:

file:
Run Code Online (Sandbox Code Playgroud)

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

And*_*ton 8

当你跑

FILE='/tmp/1.txt' echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)

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

FILE='/tmp/1.txt' echo "file: "
Run Code Online (Sandbox Code Playgroud)

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

FILE="foo"
FILE='/tmp/1.txt' echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)

第二行扩展为:

FILE='/tmp/1.txt' echo "file: foo"
Run Code Online (Sandbox Code Playgroud)

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

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

FILE='/tmp/1.txt'; echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)

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