我在写 Bash 脚本时,想把一个数组直接 export 给子进程,结果下游脚本只能拿到一段字符串,空格和空元素也全乱了。我想知道,这到底是 Bash 的限制,还是我写法不对?
3 回答
这是 Bash 的限制,不是你一行命令写错了。环境变量本质上是字符串,数组是 shell 内部的结构化变量,二者不是同一个层级。你直接 export,最先丢的通常就是空元素、下标和空格。
更稳的办法是先序列化,再还原。只传简单列表时,用 `"$@"` 或换行分隔更省事;如果必须保留索引,就用 `declare -p` 保存,再在同版本 bash 里恢复。别把数组当成天然环境变量,它不是。
不能,因为环境变量只保存字符串,不保存数组边界、下标和空元素。你直接 export 之后,下游拿到的通常只是被拼接过的一段文本,原来的结构信息已经丢了。
更稳的做法是先把数组序列化成 JSON、NUL 分隔文本,或者直接写进临时文件再读取。只要你需要保留顺序、空值和精确分隔符,就不要指望 export 本身替你保结构。
0 评论