我在shell脚本中看到一个命令后跟(没有分号)的变量赋值。那是什么意思?它似乎不会影响这个命令,它似乎不像正常分配那样影响下一个命令:
>echo $FOOBAR
>FOOBAR=1 echo $FOOBAR
>echo $FOOBAR
>
那么做什么呢?
答案 0 :(得分:1)
它仅将该环境变量设置为该值的该值。
这里,一步一步,会发生什么:
FOOBAR=1 echo $FOOBAR
FOOBAR=1 echo
fork(2)
是一个新进程echo
($FOOBAR
等于1
)exec(3)
ed:输出\n
父进程在任何时候都看不到$FOOBAR
的指定值。
答案 1 :(得分:0)
首次运行echo $ FOOBAR时,屏幕上会显示空结果,因为FOOBAR变量尚未设置。
然后将设置为1 ,然后第二次运行它将显示 1 。 注意:当您关闭写入这些终端的终端时,此值将丢失。 Unix环境中的shell和shell脚本中的$表示法仅表示变量。
你的情况在第二个命令中发生了什么,即FOOBAR = 1 echo $ FOOBAR是该行在语法上不正确但它违反了equalto(=)的合同,它实际上不接受空格因此没有错误是抛出并且FOOBAR = 1仅作为参数处理,并且当echo命令成功执行时失败。
我建议试试这个:
FOOBAR=1
echo $FOOBAR
在不同的行或
FOOBAR=1 ; echo $FOOBAR
在一行中。