我已经修改了亚历克斯·科恩的回答为我自己的需要,所以在这儿呢。
我的要求是批处理脚本可以处理字符串和整数/双输入,并且Matlab应该从调度器脚本被调用的目录运行。
#!/bin/bash
matlab_exec=matlab
#Remove the first two arguments
i=0
for var in "[email protected]"
do
args[$i]=$var
let i=$i+1
done
unset args[0]
#Construct the Matlab function call
X="${1}("
for arg in ${args[*]} ; do
#If the variable is not a number, enclose in quotes
if ! [[ "$arg" =~ ^[0-9]+([.][0-9]+)?$ ]] ; then
X="${X}'"$arg"',"
else
X="${X}"$arg","
fi
done
X="${X%?}"
X="${X})"
echo The MATLAB function call is ${X}
#Call Matlab
echo "cd('`pwd`');${X}" > matlab_command.m
${matlab_exec} -nojvm -nodisplay -nosplash < matlab_command.m
#Remove the matlab function call
rm matlab_command.m
该脚本可以被称为像(如果它是你的路径上): matlab_batcher.sh functionName stringArg1 stringArg2 1 2.0
其中,最后两个参数将作为数字和前两个作为字符串传递。