有时我需要引用整个命令行以供将来评估。通常我会这样做:
printf "%q " "$@"
这很短但很甜,但输出看起来很糟糕。大多数时候这无关紧要,但有时我想向用户展示。例如,在执行命令的历史菜单中,允许重新执行条目。在这种情况下,我想以更易读的形式引用(更接近用户本身如果他负责引用的话)。所以这个:
search 'Wordreference (eng->spa)' utter
比这更好:
search Wordreference\ \(eng-\>spa\) utter
为了获得第一个引用的表单,我可以迭代"$@"
并为每个参数执行类似的操作:
[[ $arg == *\ * ]] && arg="'"${arg//\'/\'\\\'\'}"'"
这根本不难,但它涉及循环,条件字符串转换以及每次迭代结果的连接。
我想知道是否有更多“电池包含”命令来开箱即用这种转换。
答案 0 :(得分:2)
与使用eval
稍后执行字符串的方式相同,您可以使用eval
进行打印:
eval "echo $yourstring"
这将删除shell转义但保持变量不变。