bash返回解释的转义字符串
考虑下面的bash脚本bash返回解释的转义字符串,bash,escaping,command-substitution,Bash,Escaping,Command Substitution,考虑下面的bash脚本 #!/usr/bin/env bash tstring="Hi\tThere" istring=$(echo -e $tstring) echo $istring # Prints: Hi There rstring=$(printf '%q' "$istring") # This is not doing what I intended echo $rstring # Prints: $'Hi\tThere' 我希望rs
#!/usr/bin/env bash
tstring="Hi\tThere"
istring=$(echo -e $tstring)
echo $istring # Prints: Hi There
rstring=$(printf '%q' "$istring") # This is not doing what I intended
echo $rstring # Prints: $'Hi\tThere'
我希望rstring与tstring相同,以便测试是否相等。那么基本上我该如何撤消创建istring并返回tstring的操作呢?您不能真正可靠地执行此操作,因为一旦它转换为制表符,就无法知道原始转义序列是
\t
还是\011
或\x09
还是\u0009
…好的,这很有意义,在这种情况下,我只需要去掉所有的空格,以便比较它们。谢谢。printf“%q”“$string”
将$string
转换为可重复用作shell输入的格式。表单看起来像$'string'
,其中可能包含反斜杠转义序列。通过删除前导的$”
和尾随的'
,您基本上可以检索原始字符串tstring
。请尝试类似这样的操作:rstring=${rstring:2:${{rstring}-3}
。实际上您需要printf-v rstring“%q'”$istring“