我可以成功在命令行中获取环境变量。
但如果我将命令放在.sh文件中,则运行.sh文件。
什么都没打印出来。有什么原因吗?
root@mydesktop:/tmp$ s1="hello stackoverflow"
root@mydesktop:/tmp$ echo $s1
hello stackoverflow
root@mydesktop:/tmp$/tmp$ set | grep s1
s1='hello stackoverflow'
- >按预期显示效果很好,然后我将这些命令保存到脚本文件test.sh
#!/bin/sh
echo $s1
echo ${s1}
hello=$( set | grep s1 )
echo $hello
echo ${hello}
但是在脚本运行后,我没有得到预期的结果
root@mydesktop:/tmp$ ./test.sh
root@mydesktop:/tmp$
有什么想法吗?
更新
好的,发现奇怪的事情:#set
s1=' balaba '
'
s2='another string'
还有一个' - >它可能是根本原因。
答案 0 :(得分:1)
默认情况下,声明没有export
的变量不会传递给子进程。
export s1="hello stackoverflow"
如果您没有设置它,只需将其导出:
export s1
./test.sh
---输出
hello stackoverflow
s1='hello stackoverflow'
当然使用引号:
#!/bin/sh
echo "$s1"
hello=$( set | grep s1 )
echo "$hello