美丽报价的命令

时间:2014-01-16 16:15:34

标签: bash

有时我需要引用整个命令行以供将来评估。通常我会这样做:

printf "%q " "$@"

这很短但很甜,但输出看起来很糟糕。大多数时候这无关紧要,但有时我想向用户展示。例如,在执行命令的历史菜单中,允许重新执行条目。在这种情况下,我想以更易读的形式引用(更接近用户本身如果他负责引用的话)。所以这个:

search 'Wordreference (eng->spa)' utter

比这更好:

search Wordreference\ \(eng-\>spa\) utter

为了获得第一个引用的表单,我可以迭代"$@"并为每个参数执行类似的操作:

[[ $arg == *\ * ]] && arg="'"${arg//\'/\'\\\'\'}"'"

这根本不难,但它涉及循环,条件字符串转换以及每次迭代结果的连接。

我想知道是否有更多“电池包含”命令来开箱即用这种转换。

1 个答案:

答案 0 :(得分:2)

与使用eval稍后执行字符串的方式相同,您可以使用eval进行打印:

eval "echo $yourstring"

这将删除shell转义但保持变量不变。