我想回显一个可能包含与echo相同参数的字符串.如何在不修改字符串的情况下完成?
例如:@H_301_2@
$var="-e something" $echo $var something
……没打印-e@H_301_2@
一个令人惊讶的深刻问题.由于你标记了
bash,我假设你的意思是bash的内部echo命令,尽管GNU coreutils的独立echo命令可能工作得足够相似.
原文链接:https://www.f2er.com/bash/387068.html它的要点是:如果你真的需要使用echo(这会令人惊讶,但这就是现在问题的写法),这一切都取决于你的字符串究竟包含什么.@H_301_2@
简单的情况:-e加非空字符串@H_301_2@
在这种情况下,您需要做的就是在将变量传递给echo之前引用该变量.@H_301_2@
$var="-e something" $echo "$var" -e something
如果字符串不是eaxctly一个echo选项或组合,包括任何非选项后缀,它将不会被echo识别出来并将被打印出来.@H_301_2@
更难:字符串只能是-e@H_301_2@
如果你的情况可以减少到只有“-e”,它会变得更加棘手.一种方法是:@H_301_2@
$echo -e '\055e' -e
(转义破折号,因此它不会被解释为一个选项,但在八进制序列中)@H_301_2@
那是重写字符串.它可以自动且非破坏性地完成,因此感觉可以接受:@H_301_2@
$var="-e something" $echo -e ${var/#-/\\055} -e something
您注意到我实际上使用-e选项来解释八进制序列,因此如果您打算回显-E,它将无法工作.不过,它适用于其他选项.@H_301_2@
正确的方式@H_301_2@
说真的,你不仅限于回声,是吗?@H_301_2@
printf '%s\n' "$var"