【问题标题】:How to echo a string with any content in bash?如何在 bash 中回显包含任何内容的字符串?
【发布时间】:2014-06-29 04:51:37
【问题描述】:

我很难弄清楚如何回应这个:

![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")

我不断收到此错误:

bash: ![alt: event not found

在它周围使用双引号不起作用。在它周围使用单引号确实有效,但是,我还需要回显其中包含单引号的字符串。那时我将无法用单引号包裹字符串。

有没有办法回显一串 ANY 内容?

谢谢。

编辑:这是一些上下文。我正在制作一个 Markdown 渲染器,它可以获取代码编辑器的内容,然后将代码的每一行单独附加到一个文本文件中。我这样做是为了:

echo TheLineOfMarkdown > textfile.txt

【问题讨论】:

标签: linux bash shell command-line scripting


【解决方案1】:

与许多编程语言不同,Bash 中的'...'"..." 不代表“字符串”本身;它们引用/转义它们包含的任何内容,但它们不会创建分隔参数的边界。因此,例如,这两个命令是等价的:

echo foobar
echo "fo"ob'ar'

因此,如果您需要用单引号引用某个参数,而该参数的不同部分必须包含单引号 - 没问题。

例如:

echo '![alt text](https://... "What'"'"'s up, Doc?")'

另一个选项是使用\,它类似于'...',只是它只引用单个字符。它甚至可以用在双引号内:

echo "\![alt text](https://... \"What's up, Doc?\")"

有关详细信息,请参阅§3.1.2 "Quoting" in the Bash Reference Manual

【讨论】:

  • 啊,但问题是,我不知道我需要事先回应什么。我不能在字符串内部添加任何东西,只能在字符串周围添加一些东西。我添加了一个编辑,提供了一些关于我想要完成的内容的背景。
  • @Regnarg:please 请告诉我,您不会为了将不受信任的文本粘贴到文件中而将不受信任的文本注入到动态生成的 Bash 脚本中。 :-/ 必须有更好、更安全的方法。 (对于初学者来说——与其将文本注入到 Bash 脚本中,不如直接将其注入到预期的文件中?)
  • 我不确定这是否是我正在做的事情,但听起来有点像。我认为这将是一个简单的任务(它可能仍然是),但我一直无法找到一个简单的解决方案。我实际上只是想用包含换行符的字符串替换文件的内容,但 echo $string > file.txt 效果不佳。知道如何通过命令行执行此操作吗?
  • @Regnarg:等等,你是说这不是在 shell 脚本或任何东西中,而是你在命令行中手动输入的?复杂引用的问题不在于您无法正确地引用给定的字符串,而在于您只是在寻找一种不涉及太多手动工作的方法?如果是这样,那么 - 让我知道,我可以更新我的答案,向您展示一种更简单的方法。 :-)
  • Re:“一个包含换行符的字符串,但 echo $string > file.txt 不能正常工作”:对。您需要 echo "$string" > file.txt 代替,以防止 $string 内容的分词和文件名扩展。
【解决方案2】:

! 很烦人。我的建议:使用 \!

! 调用历史完成,这也在双引号内执行。所以你需要单引号感叹号,但正如你所说,这与不需要单引号其他单引号相冲突。

请记住,您可以混合使用引号:

$ echo '!'"'"'"'
!'"

(这只是一个论点。)但在这种情况下,反斜杠更容易输入,而且很可能更具可读性。

【讨论】:

  • 啊,但问题是,我不知道我需要事先回应什么。我添加了一个编辑,提供了一些关于我正在尝试完成的内容的背景
  • @Regnarg:我不明白。您是否以编程方式生成 echo foo >> textfile 行? (追加为>>> 被覆盖)。
猜你喜欢
  • 2011-10-25
  • 2012-06-02
  • 1970-01-01
  • 2022-10-01
  • 2020-09-29
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
相关资源
最近更新 更多