【发布时间】:2020-05-19 18:32:35
【问题描述】:
我似乎能够创建执行命令的环境变量;像这样:
$ cat ./src
FOO="echo"
$ . ./src
$ echo $FOO
echo
$ $FOO hello
hello
$
有没有办法可以修改该环境变量,以便它在命令之前添加 另一个环境变量的设置? 即有没有办法解决以下问题?
$ cat ./src
FOO="MY_DIR=/tmp echo"
$ . ./src
$ echo $FOO
MY_DIR=/tmp echo
$ $FOO hello
-bash: MY_DIR=/tmp: No such file or directory
$
即我想要做的是有一个环境变量,它相当于在 shell 中手动键入以下内容:
$ MY_DIR=/tmp echo hello
hello
$
...类似于 sans envvar-prefix, $FOO 与在 shell 中键入 echo 的效果相同。
/tmp/ 当然存在,顺便说一句:
$ ls -ld /tmp/
drwxrwxrwt. 25 root root 500 May 19 11:35 /tmp/
$
更新:
我有一个约束,即“FOO”必须像$FOO hello 而不是FOO hello 那样调用。所以不幸的是,像@John Kugelman 的(当前)答案这样的函数不能成为解决方案,即使它更合适。
【问题讨论】:
-
回复:“我有一个约束,必须像
$FOO hello而不是FOO hello那样调用 'FOO':如果这是字面上唯一的问题,那么别担心,那约束很容易适应:您可以只写FOO=FOO,然后$FOO hello将扩展为FOO hello并调用您可能定义的任何FOO函数。 -
设置是否必须是分配给
FOO,您可以在调用FOO="MY_DIR=/tmp echo"之前获得设置代码吗?像.bashrc文件或类似文件? -
@root - 事实证明,我认为你的建议是可以的;抱歉,如果这些是我应该提前提到的细节,但是 bash 编程的所有许多语义和扩展、设置等规则仍然经常超出我的直接掌握,所以我经常无法合理化与提及。
标签: bash environment-variables