Bash脚本将字符串传递给Matlab

时间:2018-07-18 00:22:30

标签: string bash matlab

我正在尝试编写一个bash脚本,以将用户输入的字符串传递给Matlab函数。

这是我目前拥有的脚本:

#!/bin/bash
echo Input a message.
read message
matlab -r -nosplash -nodesktop -nojvm "arduinoWriter\(\'$message\'\);"

其中arduinoWriter是一个Matlab函数,该函数将字符串作为输入。

如果我运行脚本并输入HELLO,它将按预期工作。但是,如果我输入了HELLO WORLD,它将无法正常工作。关于空间的一些东西弄乱了。

如果我在终端中运行命令matlab -r -nosplash -nodesktop -nojvm "arduinoWriter\(\HELLO\ WORLD\'\);",它将正常工作,但是如果我在bash脚本的输入中使用HELLO\ WORLD,则无法正常工作。即使它确实可以作为输入,我也不希望不必在每个空格前都使用斜杠。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的第一个问题是将-r参数及其参数分开。您需要重新排列命令行的顺序,以使-r出现在其他参数之后,并且恰好在要执行的命令之前:

matlab -nosplash -nodesktop -nojvm -r command

(实际上,参数的顺序无关紧要,但是您需要将-r command保持在一起。)

接下来,在双引号中,您don't need to escape the parenthesis or the single quotes

  

用双引号(")引起来的字符保留引号内所有字符的文字值,但$`\和启用历史记录扩展后,!

因此,从命令中删除所有反斜杠,我们得到:

matlab -nosplash -nodesktop -nojvm -r "disp('$message');"

(我将您的函数调用替换为可以在我的机器上实际运行的东西,用于测试。)