【问题标题】:How to echo "$x_$y" in Bash script?如何在 Bash 脚本中回显“$x_$y”?
【发布时间】:2013-01-01 16:37:58
【问题描述】:

如果你打算使用 Bash 代码显示0_1,这很有趣

x=0
y=1
echo "$x_$y"

那么它只会显示

1

我试过echo "$x\_$y",还是不行。

如何回显$x_$y 表单?我将在文件名字符串上使用它。

【问题讨论】:

  • 在 vim 中启用语法着色。你会立即发现这样的简单错误。
  • echo $x\_$y 会工作;用双引号括起来会保护反斜杠。

标签: string bash shell


【解决方案1】:

逆势而上,你也可以这样做:

echo $x'_'$y

您可以将引用和未引用的部分彼此相邻,中间没有空格。由于' 不是变量名的合法字符,bash 将只替换$x。 :)

【讨论】:

  • @tomriddle_1234:它在什么方面不起作用?如果你用双引号将 echo 的参数括起来,它将不起作用,但由于某种原因,该命令没有使用双引号。
  • 还有,另一种处理方式:x=0; y=1; z=_; echo "$x$z$y";
【解决方案2】:

因为变量名中允许有下划线,所以命令:

echo "$x_$y"

正在尝试回显${x_}(在您的情况下可能为空),然后是${y}。这样做的原因是因为参数扩展是一种贪婪的操作——它会在$之后尽可能多的合法字符来形成一个变量名。

bash 联机帮助页的相关部分指出:

$ 字符引入了参数扩展、命令替换或算术扩展。

要扩展的参数名称或符号可以用大括号括起来,这是可选的,但用于保护要扩展的变量免受紧随其后的字符的影响,这些字符可能被解释为名称的一部分。

当使用大括号时,匹配的结束大括号是第一个},没有被反斜杠转义,也没有在带引号的字符串中,也没有在嵌入的算术扩展、命令替换或参数扩展中。

因此,解决方案是确保_被视为第一个变量的一部分,这可以通过以下方式完成:

echo "${x}_${y}"

我倾向于像这样所有我的 bash 变量,甚至像这样的独立变量:

echo "${x}"

因为它更明确,而且我过去被咬过很多次:-)

【讨论】:

  • 使用具有语法高亮功能的优秀文本编辑器有助于沉浸式地检测此类故障,而不会使用显式 ${x} 表示法弄乱所有代码。
【解决方案3】:

用大括号括起来:

echo "${x}_${y}"

【讨论】:

  • 任何人都知道为什么 bash 会这样吗? echo "$x.$y"。使用dot 它正在工作。
  • 因为变量中可以有下划线,但不能有圆点——如果有下划线,它会认为你有名为$x_$y 的变量。但是用点就不会混淆了
  • 变量名不能有点,值可以有任何东西
【解决方案4】:

这边:

$ echo "${x}_${y}"
0_1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2018-07-02
    • 2010-10-06
    • 2013-09-23
    • 2022-10-13
    • 2017-02-13
    相关资源
    最近更新 更多