我目前正在与这个问题作斗争。
我已经在 SE 上阅读了一些较旧的帖子,并得出结论,放置变量(甚至数组)的唯一明智的方法是~/.profile
.
好吧,数组显示出来了,简单的事情比如echo ${myarray[12]}
工作正常,但是,只能在控制台上。
myarray
是一个很大的字符串数组,有几十个持续的值,我想构建一次,而不是每次运行脚本时从头开始创建。
echo "elems = ${#myarray[@]}"
但是,像will这样的简单检查总是返回0,即数组未知且为空。
但为什么会这样呢?我实际上期望在中声明的变量~/.profile
将要也可以从我在此环境中启动的 shell 脚本中获取。 (即使来自同一个 tty,它也不会显示我的脚本内的值。)
答案1
数组不是环境变量,因此也不是(并且不可能是)由子进程(例如脚本)从其父进程继承。您必须“每次运行脚本时从头开始创建[您的数组]。”我不明白为什么你认为这是一个困难。如果这些值是恒定的,正如您所说,那么所需要做的就是将这些值从脚本读入内存。如果您担心初始化数组的代码会使您的脚本变得混乱,请将其放入单独的脚本文件中并使用“.
“ 或者 ” source
”。
我不知道你从哪里得到“放置变量(甚至数组)的唯一明智的方法是~/.profile
”的想法。