2010-04-28 174 views
15

是否有一个命令,不只是回声它的参数,但如果需要也逃脱它们(例如,如果一个参数包含空格或特殊字符)?回声,壳逃逸参数

我需要它在一些shell魔法中,而不是在一个脚本中执行一个命令我回应命令。这个输出被传送到一个python脚本,最终以更有效的方式执行这些命令(它加载实际目标python脚本的main()方法并使用给定的参数执行它,并且通过计算数据的附加参数被缓存在main())的运行。

取而代之的是,我当然可以把所有的shell魔法移植到python中,我不需要任何管道。

回答

23

使用bash,所述printf内建有一个附加的格式说明%q,它打印在一个友好的方式相应的参数:

除了标准printf(1)格式,%b原因printf的扩大反斜杠(除了\c终止输出,\',\"\?中的反斜杠不会被删除,并且以\0开头的八进制转义可能包含最多四位数字),并且%q会导致printf输出相应的参数t的格式可以重新用作shell输入。

所以,你可以做这样的事情:

printf %q "$VARIABLE" 
printf %q "$(my_command)" 

得到一个变量或命令的一种格式是安全的,再次通过输入输出的内容(即空格转义)。例如:

$ printf "%q\n" "foo bar" 
foo\ bar 

(我刚刚加入,因此会在交互shell漂亮的一个换行符。)

+1

谢谢,我不知道。如果您使用zsh,您也可以使用'q'修饰符:'$ {(q)VAR}'以类似的方式转义变量。 – ZyX 2010-04-28 18:30:25

+0

谢谢,但使用printf我必须事先知道参数的数量。那么我想我想出了一些东西。 – panzi 2010-04-29 22:35:39

+2

呃,有没有理由不能在'$ @“中为'arg'做些事情;做printf%q“$ arg”; done'? – Cascabel 2010-04-29 23:16:50