是否有一个命令不仅仅是回声它的参数,而且如果需要也会逃避它们(例如,如果一个参数包含空格或特殊字符)?
我需要它在一些shell魔法中,而不是在一个脚本中执行命令我回应命令。此输出通过管道传递给python脚本,该脚本最终以更有效的方式执行命令(它加载实际目标python脚本的main()方法并使用给定的参数执行它,并且通过计算数据之间的其他参数进行缓存运行main())。
而不是我当然可以将所有shell魔法移植到python,我不需要管道任何东西。
答案 0 :(得分:24)
使用bash,printf
内置函数有一个额外的格式说明符%q
,它以友好的方式打印相应的参数:
除了标准的printf(1)格式之外,
%b
会导致printf在相应的参数中扩展反斜杠转义序列(\c
终止输出,\'
中的反斜杠,{ {1}}和\"
未被删除,并且以\?
开头的八进制转义最多可包含四位数字,而\0
会导致printf以格式输出相应的参数可以重用为shell输入。
所以你可以这样做:
%q
以可安全传入的格式获取变量或命令输出的内容(即空格转义)。例如:
printf %q "$VARIABLE"
printf %q "$(my_command)"
(我添加了一个换行符,因此它在交互式shell中非常漂亮。)