考虑这个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)
答案 0 :(得分:2)
这个怎么样:
TESTA="testing a \"string right here\""
echo $TESTA
这就是你要找的东西吗?
按照你说的方式TESTB = $(eval echo“$ TESTA”); echo $ TESTB确实会在测试“字符串就在这里”
时产生
但实际打印
testing a string right here