我有一个带有功能的bash脚本
_launch()
{
${1}
}
testx()
{
_launch "TESTX=1 ls -la"
}
testx
我在_launch函数中收到错误“找不到TESTX = 1命令”。为什么?
当我直接在外壳上运行TESTX=1 ls -la
时,效果很好。
答案 0 :(得分:2)
使用变量保存命令不是一个好主意。参见BashFAQ/050
只要您要处理可执行文件而不是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
变量将作为环境变量向下传递给启动的命令。
答案 1 :(得分:0)
之所以会出现错误,是因为首先查看该语句以查看我们是否具有变量赋值,然后进行参数扩展。在您的情况下,bash无法识别您要扩展ls命令的环境,因此将TESTX = 1视为要执行的命令。
出于相同的原因,以下内容未设置bash变量ABC:
x='ABC=55'
$x
这将显示 ABC = 55:找不到命令。