2015-05-07 29 views
3

我是初学者到Shell脚本。Shell脚本中字符串串联错误

我已经使用了一个变量来存储值A="MyScript"。我试图在后续步骤$A_new中连接字符串。令我惊讶的是它没有工作,并且$A.new工作。

你能帮我理解这些细节吗?

由于

+0

在[这个问题](http://stackoverflow.com/questions/4181703/how-can-i-concatenate-string-variables-in-bash)中的信息有帮助吗? –

+0

@MichaelScarn虽然不是我一直在寻找,但感谢分享这样好的信息。 – Prradep

回答

0

一个变量可以包含字母(a到z或A〜Z),数字(0到9)或下划线字符(的名称_)。

Shell不需要像编程语言那样的任何变量声明,如C,C++java。所以当你编写$A_new shell时认为A_new是一个变量,你没有分配任何值,因此它变为空值。

要实现你提到的作为: ${A}_new

它总是一个很好的做法后$标志括在大括号的变量名,以避免这样的情况。

+0

谢谢@Inderdeep。感谢您的解释。 – Prradep

3

壳牌variable names由字母字符,数字和下划线的。

3.231名称

在shell命令语言,从便携字符集仅下划线,数字和alphabetics组成的字。名字的第一个字符不是数字。

所以,当你写$A_new shell解释下划线(和new)作为变量名的一部分,并且扩大了可变A_new

一个句点在变量名中无效,因此当shell解析变量$A.new以便在该句点处停止并扩展变量A

${A}语法的设计目的是使其按照预期工作。

您可以使用任何下列正确有这个工作(以优选性的粗糙顺序):

  1. echo "${A}_new"
  2. echo "$A"_new
  3. echo $A\_new

最后是最不可取因为你不能引用整个字符串(否则\不会被删除。因此,因为你基本上应该总是引用你的变量扩展,你最终可能会做echo "$A"\_new,但这并没有什么不同,然后点2最终为什么要打扰。

+0

这是您的查询的确切解释。 您也可以通过任何提及的方式明确指定: 1. $ {A} _new 2. $ A \\ _ new –

+0

谢谢@Etan的详细解答。它清除了我的怀疑和概念。 – Prradep

+0

谢谢@Amit的答案。 – Prradep

1

发生这种情况是因为下划线是变量名中的有效字符。 尝试这种方式: $ {A} _new或 “$ A” _new

+0

雅。 '$ A_new',实际上是'$ {A_new}'。 –

+0

你的意思是'$ {A} _new'而不是'{$ A} _new'。 –

+0

谢谢@Rajesh。我没有得到你的陈述罗宾。 – Prradep