带有参数的 bash 函数无法在 Msys2 中与 eval 一起使用

带有参数的 bash 函数无法在 Msys2 中与 eval 一起使用

我在 Win 10 下使用 PortableApps 的 Msys2。这个问题的答案(即问题的识别和解决)可能与 Unix/Linux 的使用部分有关,或者与它通过 Msys2 对 Windows 的“适应”有关。我事先并不知道(否则,我很可能自己就解决了!),所以我之前发过帖子(现已删除)另一个 SE 网站上有类似的问题,从而吸引不同的受众。

我有一个 shell 函数定义my_fun.sh

MYAPP=some_executable
function myfun() { echo "MYAPP=${MYAPP}" && ${MYAPP} "$@" ; }

some_executable接受选项和参数。我可以在命令行中运行

$ some_executable -3 input.dat output.dat

现在如果我从 shell 脚本运行myscript.sh

comm="myfun -3 input.dat output.dat"
echo ${comm}
eval ${comm}

echo我确定这条线是我想要的)我得到了

./myscript.sh: line 8: myfun: command not found

如果我这样做export -f myfun,然后./myscript.sh 我开始得到

MYAPP=
environment: -3: command not found

这显示了问题的根源(感谢 Kamil M 的评论)。

在 Ubuntu 机器上,我之前export -f ...遇到过与上述相同的错误。但export问题已经解决。

造成这种情况的原因是什么? 这和纯 Linux/Bash 使用有关吗,或者 Msys2 下的解析、shell 扩展、shell 继承等略有不同? 我该如何解决这个问题,以便相同的脚本可以在 Msys2 和 Ubuntu 下运行?

有关的:https://unix.stackexchange.com/questions/444946/how-can-we-run-a-command-stored-in-a-variable

答案1

我必须

export MYAPP=some_executable

在 中my_fun.sh。然后另一个脚本读取该变量的值。

相关内容