FOOBAR = foobar后跟shell命令的含义是什么?

时间:2016-01-27 09:32:54

标签: shell

我在shell脚本中看到一个命令后跟(没有分号)的变量赋值。那是什么意思?它似乎不会影响这个命令,它似乎不像正常分配那样影响下一个命令:

>echo $FOOBAR

>FOOBAR=1 echo $FOOBAR

>echo $FOOBAR

>

那么做什么呢?

2 个答案:

答案 0 :(得分:1)

它仅将该环境变量设置为该值的该值。

这里,一步一步,会发生什么:

  • 原始命令:FOOBAR=1 echo $FOOBAR
  • Shell执行替换:命令现在为FOOBAR=1 echo
  • Shell fork(2)是一个新进程
  • 环境变量在新流程中创建:命令现在为echo$FOOBAR等于1
  • 新流程为exec(3) ed:输出\n
  • 新进程退出并由shell获取

父进程在任何时候都看不到$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在一行中。