【问题标题】:Multiple variables are not getting printed in same line in shell script [duplicate]多个变量未在 shell 脚本的同一行中打印 [重复]
【发布时间】:2020-06-19 03:53:52
【问题描述】:

请看下面的shell脚本:

#!/bin/bash
echo "Enter the date in (YYYY-MM-DD) format: "
read dt
i=00
echo "/opt/log-$dt_$i"

预期输出:

Enter the date in (YYYY-MM-DD) format:
2020-06-18
/opt/log-2020-06-18_00

但得到以下输出:

Enter the date in (YYYY-MM-DD) format:
2020-06-18
/opt/log-00

请推荐?

【问题讨论】:

标签: linux shell


【解决方案1】:

您需要将您的 echo 行更改为:

echo "/opt/log-${dt}_${i}"

说明:

_(下划线)是变量名中的有效字符,因此 bash 正在寻找 $dt_$i。由于未定义 $dt_,因此不会打印它。 Bash 使用${} 提供备用变量语法,以便在执行这样的字符串插值时显式隔离变量。

【讨论】:

  • 第二个示例实际上很糟糕:您实际上是在 取消引用 dt 变量,这会使您面临分词和通配问题。特别是因为我们直接处理您无法信任的用户输入。
  • 是的,好点。这是一种事后的想法。我已将其从我的答案中删除
【解决方案2】:

像这样:

echo "/opt/log-${dt}_$i"
#               ^  ^
#       curly brackets mandatory here

这是因为您必须用_ 分隔变量,这可能是任何变量的一部分。

您使用哪个编辑器?对 的我来说,很清楚:

对比:

(下划线变为白色)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多