【问题标题】:Issue while printing variables using echo使用 echo 打印变量时出现问题
【发布时间】:2014-12-02 16:21:12
【问题描述】:

我在使用 echo 打印两个变量时遇到问题。以下是脚本中的代码 sn-p:-

tdaydatefile=$(date +'%m%d%Y')
ip=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}')
echo "Dumping all network connections to $HOME/MyLog/netstat_$ip_$tdaydatefile.csv!"

当脚本运行时,它只打印在下面:-

Dumping all network connections to /root/MyLog/netstat_12022014.csv!

它不打印系统的ip地址(ip变量)。如果我在 echo 中将 ip 替换为 tdaydatefile,它会打印 ip 并忽略 tdaydatefile 变量。

知道这里有什么问题吗?

【问题讨论】:

  • ip_ 是一个有效的变量名,所以你正在转储一个未定义的变量。试试{$ip},或者改用破折号...-$ip-$tday
  • 你应该用你正在使用的语言来标记它。
  • @MarcB:我认为您的意思是netstat_${ip}_$tdaydatefile,其中左大括号位于 $ 之后和变量名之前。
  • 干杯,谢谢你们..

标签: shell


【解决方案1】:

由于 _ 是一个有效的变量名字符,你需要告诉 shell 你的变量名在哪里结束。 (在您的代码中,shell 将 ip_ 解释为变量名。)

这可以通过将变量名包含在{...} 中来完成,即在这种情况下使用${ip}

echo "Dumping all network connections to $HOME/MyLog/netstat_${ip}_$tdaydatefile.csv!"

请注意,$HOME$tdaydatefile 不需要,因为 /. 不是有效的变量名字符。

但是,如果有疑问,请使用 ${...} — 它也有助于提高可读性。

【讨论】:

  • 办公室的本地编码约定是“所有变量名引用始终包含在${name} 中”。我并不完全热衷于它,但它是系统的,可以自动修复。
  • @JonathanLeffler:就我个人而言,我只在技术上需要和扩展字符串的可读性时才这样做,因为花括号很难输入。重新编辑:虽然在如此简短的答案中可能不需要,但我发现粗体的关键段落有助于快速引起人们对帖子gist的注意;这也是我在创建个人笔记时使用的一种技术。
  • 风格复杂。我在自己的代码中主要使用$variable 而不是${variable},但在工作中强加的规则中有一些智慧。答案格式样式同样复杂,但将粗体保持在最低限度通常是一个好主意 - 但也非常主观。
  • @JonathanLeffler 感谢您的反馈;同意。关于粗体的最后一个想法:完整的叙述有利于初学者,而粗体的段落有助于更有经验的/回头的观众更快地了解要点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多