我想提交带有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)
第三个参数在空格处突破意外,引用被忽略.??
在双引号中使用数组和@:
function execute () {
echo "$1"
echo "$2"
echo "$3"
}
CMD=('CMD' 'ARG1 ARG2 ARG3' 'ARG4')
execute "${CMD[@]}"
Run Code Online (Sandbox Code Playgroud)