扩展双引号在bash中有三个反斜杠逃脱了?

时间:2014-07-21 03:31:05

标签: string bash escaping

考虑这个bash示例:

TESTA="testing a \\\"string right here\\\""
echo $TESTA
# testing a \"string right here\"

输出符合预期:第一对反斜杠解析为单个反斜杠(\),下一个转义双引号\"扩展为双引号(" ),所以最终的合并结果是\"

现在这对我来说很奇怪:

TESTB=$(echo $TESTA)
echo $TESTB
# testing a \"string right here\"

在这里,我希望$TESTB内容确实是testing a \"string right here\" - 但我希望在打印出来时,转义双引号{{ 1}}会扩展为双引号\",所以我希望打印结果是未转义的双引号,即";但那并不是我得到的回应,我得到了与内容相同的逃逸双引号......

那么,有没有办法扩展" testing a "string right here"所以它最终包含未转义的双引号? (我试过$TESTA,它应该"启用反斜杠转义的解释",但它没有帮助)......


编辑:事实证明,对于这种特殊情况,echo -e确实会导致TESTB=$(eval echo "$TESTA") ; echo $TESTB - 但我不想testing a "string right here":如果我'以这种方式构建命令行字符串,使用eval会很麻烦。所以也许我应该更好地改写:如何扩展像这样的转义双引号,作为排序的字符串操作的结果(调用extern程序是好的,只要字符串本身不是eval&# 39; d)

1 个答案:

答案 0 :(得分:2)

这个怎么样:

TESTA="testing a \"string right here\""
echo $TESTA

这就是你要找的东西吗?

按照你说的方式

  

TESTB = $(eval echo“$ TESTA”); echo $ TESTB确实会在测试“字符串就在这里”

时产生

但实际打印

 testing a string right here