转义sh/bash函数参数

jlu*_*lue 1 bash shell sh

我想提交带有shell函数参数的多个命令,因此引用我的命令,如:

$ CMD=''\''CMD'\'' '\''ARG1 ARG2 ARG3'\'''
$ echo $CMD
'CMD' 'ARG1 ARG2 ARG3' 'ARG4'
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试在这样的函数中使用它们时:

$ function execute { echo "$1"; echo "$2"; echo "$3"; }
Run Code Online (Sandbox Code Playgroud)

我得到了结果:

$ execute $CMD
'CMD'
'ARG1
ARG2
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个结果:

$ execute $CMD
CMD
ARG1 AGR2 ARG3
Run Code Online (Sandbox Code Playgroud)

提前致谢!

PS:我使用了一个不引用的功能,如:

function unquote { echo "$1" | xargs echo; }
Run Code Online (Sandbox Code Playgroud)

编辑:

让我的意图更清楚:我想逐步建立一个需要带有传递给子函数的空格的参数的命令:

$ CMD='HOST '\''HOSTNAME'\'' '\''sh SCRIPTNAME'\'' '\''MOVE '\''\'\'''\''/path/to/DIR1'\''\'\'''\'' '\''\'\'''\''/path/to/DIR2'\''\'\'''\'''\'''
$ function execute { echo "$1 : $2 : $3 : $4"; }
$ execute $CMD
HOST : 'HOSTNAME' : 'sh : SCRIPTNAME'
Run Code Online (Sandbox Code Playgroud)

第三个参数在空格处突破意外,引用被忽略.??

cho*_*oba 5

在双引号中使用数组和@:

function execute () {
    echo "$1"
    echo "$2"
    echo "$3"
}

CMD=('CMD' 'ARG1 ARG2 ARG3' 'ARG4')
execute "${CMD[@]}"
Run Code Online (Sandbox Code Playgroud)