为什么没有sh -c" ..."存储变量?

时间:2015-09-30 13:56:41

标签: bash shell sh nohup

为什么没有" nohup sh -c"存储变量?

$ nohup sh -c "RU=ru" &
[1] 17042
[1]+  Done                    nohup sh -c "RU=ru"
$ echo ${RU}

$ RU=ru
$ echo ${RU}
ru

如何使其存储变量值以便以后可以在循环中使用?

目前,当我使用RU=ru代替我的bash循环时,它没有记录该值,即

nohup sh -c "RU=ru; for file in *.${RU}-en.${RU}; do some_command ${RU}.txt; done" &

它也不在sh -c "..."内工作,cat nohup.out不为echo输出任何内容:

$ nohup sh -c "FR=fr; echo ${FR}" &
[1] 17999
[1]+  Done                    nohup sh -c "FR=fr; echo ${FR}"
$ cat nohup.out 

1 个答案:

答案 0 :(得分:3)

  

为什么没有" nohup sh -c"存储变量?

环境变量只存在于进程中,并且可能是进程的子进程。当您运行sh -c时,您正在创建一个新的子进程。该子进程中的任何环境变量都不能向上移动"到父进程。这就是shell和环境变量的工作原理。

  

它并没有在sh -c" ..." cat nohup.out输出   什么都没有回声"

原因是您使用的是双引号。当您使用双引号时,shell会在运行命令之前执行变量扩展。如果切换到单引号,变量将不会展开,直到shell命令运行:

nohup sh -c 'FR=fr; echo ${FR}'