我正在尝试编写一个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
,则无法正常工作。即使它确实可以作为输入,我也不希望不必在每个空格前都使用斜杠。
有什么想法吗?
答案 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');"
(我将您的函数调用替换为可以在我的机器上实际运行的东西,用于测试。)