echo shell-escapes参数

时间:2010-04-28 17:46:49

标签: bash shell arguments escaping echo

是否有一个命令不仅仅是回声它的参数,而且如果需要也会逃避它们(例如,如果一个参数包含空格或特殊字符)?

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

而不是我当然可以将所有shell魔法移植到python,我不需要管道任何东西。

1 个答案:

答案 0 :(得分:24)

使用bash,printf内置函数有一个额外的格式说明符%q,它以友好的方式打印相应的参数:

  

除了标准的printf(1)格式之外,%b会导致printf在相应的参数中扩展反斜杠转义序列(\c终止输出,\'中的反斜杠,{ {1}}和\"未被删除,并且以\?开头的八进制转义最多可包含四位数字,而\0会导致printf以格式输出相应的参数可以重用为shell输入。

所以你可以这样做:

%q

以可安全传入的格式获取变量或命令输出的内容(即空格转义)。例如:

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

(我添加了一个换行符,因此它在交互式shell中非常漂亮。)