我有这个示例 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"