如何在 zsh 的节点中使用 process.env 获取 shell 数组

How can I get shell array using process.env in node in zsh

在 zsh(v5.8) 中,我无法使用 node.js(v12.20.1) 中的 process.env 读取 shell 环境变量数组。

console.log(process.env);

# zsh
export TEST1=(xxx yyy)
export TEST2=zzz
node env.js

# results
{
    TEST2: 'zzz'
}

# bash
export TEST1=(xxx yyy)
export TEST2=zzz
node env.js

# results
{
    TEST1: '(xxx yyy)',
    TEST2: 'zzz',
}

那么,如何在 zsh 中获取 node.js 中的 shell 数组。

zsh 变量支持数组​​类型,环境不支持数组

# example
# '-x' options, automatic export to the environment
typeset TEST1=(xxx yyy)
typeset -x TEST2=(aaa bbb) # ignore -x because, TEST2 type is arrays
typeset TEST3=xxx
typeset -x TEST4=aaa

echo $TEST1 $TEST2 $TEST3 $TEST4
# print all
xxx yyy aaa bbb xxx aaa

env
# print TEST4
{
    TEST4=aaa
}

不再直接在zsh上处理数组类型,而是换成在node上解决的方式
在读入 string format 而不是数组类型后,我通过 split().

解决了它
  • env.js
console.log(process.env);
const CONST_TEST1 = process.env.TEST1.split(' ');
console.log(CONST_TEST1 instanceof Array);
console.log(CONST_TEST1);
# zsh
export TEST1='xxx yyy'
node env.js

# results
{
  TEST1: 'xxx yyy',
  _: '/Users/kmk/.nvm/versions/node/v12.20.1/bin/node'
}
true
[ 'xxx', 'yyy' ]