如何将带有空格的Unix命令传递给Shell脚本

时间:2019-02-08 10:33:36

标签: bash shell arguments port command-line-arguments

C#程序正在使用一个参数调用shell脚本。该参数是一个UNIX命令:

port="/dev/ttyUSB0";
procStartInfo = new ProcessStartInfo("sudo", "sh test.sh " + 
"$(udevadm info - a - n " + port + " | grep '{serial}' | head - 
n1)");

我的shell脚本是 test.sh

echo $@

它将显示以上命令:

$(udevadm info - a - n /dev/ttyUSB0 | grep '{serial}' | head - n1)

但不是预期的结果。

请帮助。如何运行此命令

1 个答案:

答案 0 :(得分:0)

您可以致电sh -c "COMMAND"COMMAND可以是管道,并支持各种重定向。就像在shell命令行中输入COMMAND一样。您只需通过"来使\"转义。同样,必须对单引号内的$进行转义。

sh -c 'COMMAND'(在COMMAND周围使用单引号)是一种选择,如果在COMMAND中不使用单引号并且您不想扩展$

顺便说一句,始终在双引号$@中使用"$@"。否则,将在空格处进行单词拆分。

相关问题