小编use*_*913的帖子

如何为命令动态设置环境变量?

我想使用某种带有纯 bash 的简约模板引擎并且envsubst

\n
user@host:~$ env -i FOO=foo BAR="bar baz" envsubst \'$FOO,$BAR\' \\\n  <<< \'Hello "$FOO" and "$BAR"!\'\nHello "foo" and "bar baz"!\n
Run Code Online (Sandbox Code Playgroud)\n

以上有效,但仅包含静态变量。

\n

现在让我们假设环境变量是动态给出的,就像关联数组一样:

\n
declare -A MY_ENV=([FOO]=foo [BAR]="bar baz")\n
Run Code Online (Sandbox Code Playgroud)\n

解析数组键值对仅适用于没有空格的环境值(错误):

\n
env -i \\\n  $(for k in "${!MY_ENV[@]}"; do printf "%s=%s " $k "${MY_ENV[$k]}"; done) \\ \n  envsubst #...\n
Run Code Online (Sandbox Code Playgroud)\n

尝试用引号(用 note \'%s\' 代替%s )括起环境值也会出错:

\n
env -i \\\n  $(for k in "${!MY_ENV[@]}"; do printf "%s=\'%s\' " $k "${MY_ENV[$k]}"; done) \\ \n  envsubst …
Run Code Online (Sandbox Code Playgroud)

bash environment-variables associative-array template

6
推荐指数
1
解决办法
2427
查看次数