VSCode shell 任务转义单引号
VSCode shell task escaping single quotes
VSCode 在定义任务时提供 shell 转义。我尝试了不同的机制,但没有一个普遍适用的结果。
给定一个测试字符串:
hello 'world' (what's your name? --)
tasks.json 有:
{
"label": "test",
"type": "shell",
"command": "echo",
"args":[
{
"value": ["${selectedText}"],
"quoting": "escape"
}
]
},
通过这种方法,vscode 已将任务解析为:
echo hello\ \'world\'\ (what\'s\ your\ name?\ --)
这是完全错误的。 - 未转义,) 未转义,参数两边没有引号。
我试过引用="strong"
现在任务被解析为:
echo 'hello 'world' (what's your name? --)'
那不行!现在字符串中的单引号挡住了。
我也试过将值更改为 ['${selectedText}'] - 在这种情况下,我们得到
echo ''
看来我们无法正确地 shell 开箱即用。我想我需要在 vscode 内部创建一个脚本并完全避免 shell。最好的方法是什么?
我在 Windows 10,WSL,bash,VSCode 1.55.1
我有一个解决方案,而且有效。希望其他人能感受到它带给我的快乐。 :-)
{
"label": "test",
"type": "shell",
"command": "echo \"$(cat << 'HEREDOC' \n${selectedText}\nHEREDOC\n)\" ",
}
这利用了 bash 中存在的 HEREDOC 机制。 this thread 中的 skztr 归功于(有点晚了)- 2010 年发布!
这利用了 HEREDOC 语法 bash 支持:
<< 'TAG'
stuff
TAG
允许将完全未处理的内容传递给 bash。请务必注意,<< 'TAG' 之后和最终 TAG 之前的换行符是必需的。为了使其在 json 文件中工作,我将 \n 放入字符串中,并且效果很好,因为它们将被传递给 shell,它将知道如何处理它们。
最后,“command”值周围的引号以及传递给 echo 的内容周围的引号是必需的。内部集合必须用“转义。因此我们得到
"command": "echo \"...\""
VSCode 在定义任务时提供 shell 转义。我尝试了不同的机制,但没有一个普遍适用的结果。
给定一个测试字符串:
hello 'world' (what's your name? --)
tasks.json 有:
{
"label": "test",
"type": "shell",
"command": "echo",
"args":[
{
"value": ["${selectedText}"],
"quoting": "escape"
}
]
},
通过这种方法,vscode 已将任务解析为:
echo hello\ \'world\'\ (what\'s\ your\ name?\ --)
这是完全错误的。 - 未转义,) 未转义,参数两边没有引号。
我试过引用="strong"
现在任务被解析为:
echo 'hello 'world' (what's your name? --)'
那不行!现在字符串中的单引号挡住了。
我也试过将值更改为 ['${selectedText}'] - 在这种情况下,我们得到
echo ''
看来我们无法正确地 shell 开箱即用。我想我需要在 vscode 内部创建一个脚本并完全避免 shell。最好的方法是什么?
我在 Windows 10,WSL,bash,VSCode 1.55.1
我有一个解决方案,而且有效。希望其他人能感受到它带给我的快乐。 :-)
{
"label": "test",
"type": "shell",
"command": "echo \"$(cat << 'HEREDOC' \n${selectedText}\nHEREDOC\n)\" ",
}
这利用了 bash 中存在的 HEREDOC 机制。 this thread 中的 skztr 归功于(有点晚了)- 2010 年发布!
这利用了 HEREDOC 语法 bash 支持:
<< 'TAG'
stuff
TAG
允许将完全未处理的内容传递给 bash。请务必注意,<< 'TAG' 之后和最终 TAG 之前的换行符是必需的。为了使其在 json 文件中工作,我将 \n 放入字符串中,并且效果很好,因为它们将被传递给 shell,它将知道如何处理它们。
最后,“command”值周围的引号以及传递给 echo 的内容周围的引号是必需的。内部集合必须用“转义。因此我们得到
"command": "echo \"...\""