是否有一个命令,不只是回声它的参数,但如果需要也逃脱它们(例如,如果一个参数包含空格或特殊字符)?回声,壳逃逸参数
我需要它在一些shell魔法中,而不是在一个脚本中执行一个命令我回应命令。这个输出被传送到一个python脚本,最终以更有效的方式执行这些命令(它加载实际目标python脚本的main()方法并使用给定的参数执行它,并且通过计算数据的附加参数被缓存在main())的运行。
取而代之的是,我当然可以把所有的shell魔法移植到python中,我不需要任何管道。
是否有一个命令,不只是回声它的参数,但如果需要也逃脱它们(例如,如果一个参数包含空格或特殊字符)?回声,壳逃逸参数
我需要它在一些shell魔法中,而不是在一个脚本中执行一个命令我回应命令。这个输出被传送到一个python脚本,最终以更有效的方式执行这些命令(它加载实际目标python脚本的main()方法并使用给定的参数执行它,并且通过计算数据的附加参数被缓存在main())的运行。
取而代之的是,我当然可以把所有的shell魔法移植到python中,我不需要任何管道。
使用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漂亮的一个换行符。)
谢谢,我不知道。如果您使用zsh,您也可以使用'q'修饰符:'$ {(q)VAR}'以类似的方式转义变量。 – ZyX 2010-04-28 18:30:25
谢谢,但使用printf我必须事先知道参数的数量。那么我想我想出了一些东西。 – panzi 2010-04-29 22:35:39
呃,有没有理由不能在'$ @“中为'arg'做些事情;做printf%q“$ arg”; done'? – Cascabel 2010-04-29 23:16:50