找不到Bash函数变量命令错误

找不到Bash函数变量命令错误,bash,function,Bash,Function,我有一个像这样的bash脚本,带有一个函数 _launch() { ${1} } testx() { _launch "TESTX=1 ls -la" } testx 我在_启动函数中发现错误“TESTX=1命令未找到”。为什么? 当我直接在shell上运行TESTX=1 ls-la时,它工作得很好。使用变量来保存命令不是一个好主意。看 只要您处理的是可执行文件而不是shell内置文件,您就可以这样做: _launch() { env $1 } 如果在要启动的命令的var

我有一个像这样的bash脚本,带有一个函数

_launch()
{
  ${1}
}

testx()
{
  _launch "TESTX=1 ls -la"
}

testx
我在_启动函数中发现错误“TESTX=1命令未找到”。为什么?
当我直接在shell上运行TESTX=1 ls-la时,它工作得很好。

使用变量来保存命令不是一个好主意。看

只要您处理的是可执行文件而不是shell内置文件,您就可以这样做:

_launch() {
    env $1
}
如果在要启动的命令的
var=value
对或参数中使用的值中有文字空格,这将不会很好地发挥作用

您可以通过将命令传递给启动函数并在函数调用本身中设置变量来克服此问题,如下所示:

_launch() {
    #       your launch prep steps here...
    "$@"  # run the command
    #       post launch code here
}
TESTX=1 TESTY=2 TESTZ=3 _launch ls -la

变量将作为环境变量传递给已启动的命令。

您会得到错误,因为首先查看语句以查看是否有变量赋值,然后执行参数扩展。在您的情况下,bash不知道您想要为ls命令扩展环境,而是将TESTX=1视为要执行的命令

出于同样的原因,以下操作不会设置bash变量ABC:

x='ABC=55'
$x

这将打印ABC=55:找不到命令。

为什么要这样做?为什么不能将
TESTX
的值作为单独的参数传递?我想启动一个设置了变量值的应用程序。ls-la只是一个例子