echo shell-escapes参数

pan*_*nzi 17 bash shell arguments escaping echo

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

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

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

Cas*_*bel 25

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

除了标准printf(1)格式,%b导致printf的扩大反斜杠转义序列中的相应参数(除了\c终止输出,反斜杠\',\"\?不会被删除,并以八进制溢出开头\0可以含有至多四个数字),和%q导致的printf输出在可重新用作壳输入一个格式对应的参数.

所以你可以这样做:

printf %q "$VARIABLE"
printf %q "$(my_command)"
Run Code Online (Sandbox Code Playgroud)

获取变量或命令输出的内容,其格式可以安全地再次作为输入传入(即空间转义).例如:

$ printf "%q\n" "foo bar"
foo\ bar
Run Code Online (Sandbox Code Playgroud)

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

  • 呃,有什么理由你不能在"$ @"中做一些像'for arg'这样的事情; do printf%q"$ arg"; done`? (2认同)