bash - bash 函数可以用来完全转义任何字符串(包括嵌套的单引号)吗?
问题描述
我知道有很多方法可以手动转义同类嵌套引号。
例子
echo 'this single quote '"'"' is escaped.'
StackOverflow 上已经有更多的方法可以做到这一点,但我正在尝试采用这个概念并将其作为一个函数来逃避一切。我已经好几次没有成功地为 Bash 找到一个多合一的转义解决方案(例如,我一直在寻找一个包含转义但没有运气的字符串库)。
这是我的尝试之一:
function quote() {
printf '%s' "'${1//\'/\'"\'"\'}'"
}
这个想法是所有单引号都将替换为上述转义样式'"'"'
。我也尝试过使用转义风格做同样的事情,如下所示\'
:没运气。
在我的研究中,我遇到的关于这个主题的每一个回应都让人觉得这是不可能的,但我不是那种接受这个答案的人。对我来说,如果您可以回显这样的字符串:'test \' test'
,那么它也应该可以在函数中表达,其中反斜杠或其他方式会自动添加以转义字符。
echo '~!@#$%^&*()_+`1234567890-=qwertyuiop[]\QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?zxcvbnm,./'
如上所示,传统英文键盘上的任何基本键都不需要转义,但在其内部嵌套相同类型的引号则需要转义。
任何人都可以对此有所了解吗?我是否遗漏了一些明显的东西,或者这真的有那么难吗?
解决方案
您不需要模仿 shell 引用,正确引用变量就足够了。
#! /bin/bash
tag () {
echo Setting tags to "$2".
}
while read tags ; do
tag --set "$tags"
done <<EOF
tag1,tag2,tag3
Tom's_Shoes
The_"best"
EOF
推荐阅读
- deep-learning - 为什么生成器损失为 0.00 但仍然在 GAN 中产生白色图像?
- azure-functions - 在哪里可以找到 .Net 5.0 C# dotnet-isolated 上 Azure 函数的 SignalR 服务输出绑定的文档
- java - Kotlin Coroutines for Parallelism 以及我可以打开协程多长时间?
- algorithm - 乘数(codeforces)
- node.js - 如何对帖子进行排序、索引和分页 mongodb-mongoose
- django - 有没有更好的通过表记录 Django 创建的方法?
- android-studio - Android Studio:“到处搜索”的“双班”不起作用
- java - 如何更改多个文档
- android - 房间 LiveData 未正确更新
- sql - 如何将我的部分 In Memory LINQ GroupBy 查询转换为完整的数据库查询,还是应该使用原始 sql?