为什么 nohup sh -c "..." 不存储变量?

Why doesn't nohup sh -c "..." store variable?

为什么"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 

Why doesn't "nohup sh -c" stores variable?

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

It doesn't work within the sh -c "..." too, cat nohup.out outputs nothing for the echo"

这是因为您使用了双引号。当您使用双引号时,shell 在 运行 命令 之前进行变量扩展 。如果切换到单引号,变量将不会扩展,直到 shell 命令 运行s:

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