WSL Bash脚本中捕获wslpath输出,避免反斜杠转义的方法
解决WSL中捕获Windows路径时反斜杠丢失的问题
问题本质
你遇到的不是反斜杠被转义,而是变量未加引号展开时,特殊字符被Bash解析。wslpath -w输出的C:\tmp里,\t会被识别为制表符,直接echo $var就会变成C: mp,导致路径失效。
正确处理方案
1. 赋值与引用全程用双引号包裹
捕获输出和调用cmd.exe时都用双引号,确保反斜杠被完整保留:
var="$(wslpath -w .)" echo "$var" # 输出正确的C:\tmp cmd.exe /c "$var"
双引号会保护变量内的特殊字符(包括反斜杠),避免Bash对其进行转义解析。
2. 直接传递输出(无需中间变量)
如果不需要复用路径变量,可以直接将wslpath的输出作为参数传递,同样用引号包裹:
cmd.exe /c "$(wslpath -w .)"
3. 手动转义反斜杠(可选)
若需要手动处理路径格式,可将反斜杠替换为双反斜杠,确保Bash不解析为特殊字符:
var=$(wslpath -w . | sed 's/\\/\\\\/g') echo "$var" # 输出C:\\tmp cmd.exe /c "$var"
此方法不如双引号方案简洁,仅作为备选。
验证变量有效性
执行以下命令可确认变量存储的路径正确:
var="$(wslpath -w .)" printf "%q\n" "$var" # 输出带转义标识的C:\\tmp,说明变量实际存储的是C:\tmp
内容的提问来源于stack exchange,提问作者sogrady
相关产品推荐
相关产品推荐

