【问题标题】:Error in string Concatenation in Shell ScriptingShell 脚本中的字符串连接错误
【发布时间】:2015-05-07 01:27:59
【问题描述】:

我是 Shell 脚本的初学者。

我使用了一个变量来存储值A="MyScript"。我尝试在后续步骤$A_new 中连接字符串。令我惊讶的是,它不起作用,$A.new 起作用了。

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

谢谢

【问题讨论】:

  • this question 中的信息有帮助吗?
  • @MichaelScarn 虽然不是我要找的,但感谢分享这么好的信息。

标签: shell unix


【解决方案1】:

Shell variable names 由字母字符、数字和下划线组成。

3.231 名称

在 shell 命令语言中,仅由可移植字符集中的下划线、数字和字母组成的单词。名称的第一个字符不是数字。

因此,当您编写 $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 点没有什么不同,所以为什么要打扰。

【讨论】:

  • 这是您查询的准确解释。您也可以通过任何上述方式明确指定:1. ${A}_new 2. $A\_new
  • 感谢@Etan 的详细回答。它清除了我的疑问和概念。
  • 感谢@Amit 的回答。
【解决方案2】:

这是因为下划线是变量名中的有效字符。 试试这个方法: ${A}_new 或 "$A"_new

【讨论】:

  • 是的。 $A_new,其实就是${A_new}
  • 你的意思是${A}_new不是{$A}_new
  • 谢谢@Rajesh。我没有收到你的陈述 Robin。
【解决方案3】:

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

Shell 不需要像 CC++java 这样的编程语言中的任何变量声明。因此,当您编写 $A_new shell 时,请将 A_new 视为一个变量,您尚未为其分配任何值,因此它为 null。

要实现您提到的用途: ${A}_new

$ 符号之后用大括号将变量名括起来总是一个好习惯,以避免这种情况。

【讨论】:

  • 谢谢@Inderdeep。谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 2021-12-31
  • 1970-01-01
  • 2021-11-19
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多