首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在bash中将Bash中的单引号替换为两个单引号

如何在bash中将Bash中的单引号替换为两个单引号
EN

Stack Overflow用户
提问于 2017-04-10 05:08:24
回答 1查看 2.2K关注 0票数 0

我正在尝试使用sed将字符串中的单引号替换为双引号。

我尝试过这样的回应:这是一个可爱的日子| sed "s/'/\"/g“,但是字符串没有找到匹配项,也没有给出任何结果。

我在Ubuntu for windows上使用Bash

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-04-10 05:15:12

扩展可以非常简单地得到你想要的东西:

代码语言:javascript
复制
original="it's a lovely day"
modified=${original//\'/\"}
echo "$modified"

除了它的简单性之外,这种扩展不使用外部命令(只使用shell特性),因此性能开销比启动单独的进程低得多。

稍微分解一下语法:

  • ${original...}表示我们正在扩展替换variable
  • //表示"search occurrences"
  • \' by"
  • \" is an original
  • / to

“替换所有替换是一个转义的双引号(要搜索的文本)

另一种有趣的方式是:

代码语言:javascript
复制
repl()
{
  local IFS="$2$1"
  set -- $3
  echo "$*"
}

repl \'  \"  "it's a lovely day"
repl "'" '"' "it's a lovely day" # Quoted rather than escaped

可以以子see为代价使其符合POSIX(参见下面的注释):

代码语言:javascript
复制
repl()
(
  IFS="$2$1"
  set -- $3
  echo "$*"
)

(repl \'  \"  "it's a lovely day")
(repl "'" '"' "it's a lovely day") # Quoted rather than escaped

子外壳是通过将语句括在括号中来创建的。不这样做会改变IFS的值(不像在第一个版本中那样声明为"local“),这可能是您想要避免的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43311959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档