Linux命令行中的分号

21

我正在Linux中通过命令行提供输入来运行我的应用程序。 我的输入字段包含一个参数,其中包含内部的“;”(分号)。(例如:123; 434; 5464)。 这将使用UTF8String编码进行解析和发送。 但是当我像这样使用时,初始阶段就会出现以下错误:

 bash: 434: command not found
 bash: 5464: command not found
当我捕获流量时,输出内容仅包含123而不是123; 434; 5464。 但如果我不用分号(例如:123:434:5464)给出输入,则不会出现任何问题,输出正常为123:434:5464。
请告诉我如何使用分号作为命令行输入以获得输出。在使用分号时是否有特定的语法要使用。 我正在运行以下命令:
./runASR.sh -ip 10.78.242.4 -port 3868 -sce 10.78.241.206 -id 85;167838865;1385433280

其中 -id 字段包含了该问题的值。

1个回答

43

; 被视为一个表示命令结束的字符。所以对于 Bash 来说,123;456;5464 实际上是三个命令。要传递这样的元字符,请使用转义字符 \ 进行转义。

./command 123\;456\;5464

或者使用单引号引用它(双引号会评估内部字符串)(感谢Triplee,我忘了提到这点)

./command '123;456;5464'

2
双引号在这里实际上可以很好地工作(但单引号通常更好);你需要担心双引号内的 $ 和反引号符号。 - Jonathan Leffler
以下命令会等待前一个命令执行完毕后再执行吗? - weefwefwqg3
1
@weefwefwqg3 在;后面的命令直到;左边的命令执行完毕才会被执行。 - Shiplu Mokaddim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接