【问题标题】:How to escape a single quote in single quote string in Bash?如何在 Bash 中的单引号字符串中转义单引号?
【发布时间】:2011-11-24 08:35:29
【问题描述】:

我想像这样在 Bash 中显示一个字符串

I'm a student

当然可以这样

echo "I'm a student"

但是如何在字符串周围使用单引号来实现这一点?

【问题讨论】:

标签: linux bash escaping


【解决方案1】:
echo 'I\'m a student'

不起作用。但以下工作:

echo $'I\'m a student'

来自 bash 的手册页:

单引号不能出现在单引号之间,即使在前面 用反斜杠。
....
$'string' 形式的单词会被特殊处理。这个单词 展开为字符串,将反斜杠转义字符替换为 由 ANSI C 标准指定。

【讨论】:

  • 更丑的形式是:`'I'"'"'m a student'
  • echo $'I\'m a student!' => !': event not found,这不是一个真正的单引号字符串,在 bash 中,它应该防止任何解释。
  • @regilero 什么版本有这个问题?我在 bash 4.1.2 中没有看到该错误。
  • @sappjw OS X bash:$ bash --versionGNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15) Copyright (C) 2007 Free Software Foundation, Inc.
  • 而这种东西就是我现在使用 Python 作为 Bash 脚本的替代品的原因。
【解决方案2】:

Glenn Jackman 提到的“丑陋”解决方案实际上应该被列为顶级答案。它运作良好,在某些情况下实际上很漂亮。

'I'"'"'m a student'

这会在I 之后结束单引号字符串,然后立即开始包含单引号的双引号字符串,然后开始另一个单引号字符串。然后 Bash 将所有连续的字符串连接成一个。

美丽!

【讨论】:

  • 我认为我们对美的定义有些不同.. ;)
  • 严格来说,它没有回答如何在单引号字符串中转义单引号的问题 ;-)
  • 潜在的最常见问题是想要在重构代码上达到“n 级”。这确实满足了这一需求。而$ 不一定具有“+n”容量。我不确定我是否需要进行更多测试。但在我看来,由于这一点,我将能够执行已经在单引号中存储到单独变量中的代码。
【解决方案3】:

以下示例有效,因为转义单引号 \' 在技术上位于两个单引号参数之间

echo 'I'\''m a student'

【讨论】:

  • 这似乎是最好的答案。我想它的投票率不高,因为它是在之前的答案几年后发布的。
  • 比上面的答案好多了,而且更容易混淆!
  • 在 scp 上查找匹配的 `'' 时出现意外 EOF 错误
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多