为变量分配值时出现“ STR:找不到命令”


9

我在名为“ test.sh”的shell脚本中输入了以下几行:

#!/bin/bash
echo Hello World
STR=”Hello Again
echo $STR

chmod变为可执行文件后,我使用运行脚本./test.sh。但是,我得到消息

./test.sh: line 3  STR: Command not found

我究竟做错了什么?


1
Terdon的答案是否解决了您的问题?如果不是这样,可能是您在变量分配周围意外地有空格。
Arronical '16

@Voker只是基于我的建议的风格注释:我认为最好将Blockquote用于错误消息而不是Code块;最后,这不是代码,而是Bash解释器返回的一些文本。
fedorqui '16

@fedorqui为什么?报价单块不保留格式,请他们解释特殊字符(例如*_#)的降价,并通过读屏软件渲染不同。我认为计算机提供或接收的任何内容都应在代码块中。您永远不知道确切的格式何时可用。尤其是在处理unicode发挥作用的事情时。
terdon '16

@terdon 确实取决于大小写甚至有要求为日志/警告/错误消息添加格式的请求,该格式允许自动换行并保留换行符。对我来说,如果只是这样的一行,我更喜欢引用块,因为这样可以更容易理解什么是代码,什么是错误。
fedorqui '16

@fedorqui我想我们应该把它带到meta上,但是每当发布由计算机读取或产生的消息时,我总是更喜欢固定宽度的字体和精确的格式再现。

Answers:


20

您正在使用什么来创建该脚本?您在问题中使用的引号字符是错误的。它们不是常规的双引号("),而是。常规报价为:

$ uniprops '"' | head -1
U+0022 "› \N{QUOTATION MARK}

而您的是:

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

因此,只需使用常规引号就可以了:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well

感谢您的答复Terdon。该文件中的双引号正确,该帖子来自电子邮件。
杰伊·西尔弗

1
uniprops看起来很酷。我找到了页面(是我们自己的tchrist吗?)。我必须从源代码下载它,还是在某个地方的包管理器中找到它?E: Unable to locate package uniprops
TRiG '16

1
我使用Perl很少(根本很少使用)。我只想了解有关Unicode 的最低要求
TRiG

1
@TRiG好,在Ubuntu中,它非常简单sudo apt-get install cpanminus; sudo cpanm Unicode::Tussle,然后您有了uniprops命令。当然,tchrist写下了该死的东西,所以您不妨在聊天中问他:)
terdon

1
遗憾的是,我一直都在胡说八道。我老板的一个特定Wiki系统似乎有一个讨厌的习惯,-即将连字符减U + 002D转换为连字符U + 2010(或类似字符)。然后,诸如uname ‐a停止工作的事情:-/。电子邮件客户端通常具有类似的邪恶习惯,尤其是在使用HTML格式时,这是偏爱纯文本电子邮件的另一个很好的理由。
Digital Trauma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.