2014-12-02 98 views
0

我有使用echo打印两个变量的问题。下面是从脚本代码片段: -使用echo打印变量时出现问题

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中的tdaydatefile替换ip,它会打印ip并忽略tdaydatefile变量。

任何想法这里可能是错误的?

+0

'ip_'是一个有效的变量名称,您正在转储一个未定义的变量。尝试'{$ ip}',或者改为使用破折号'' - $ ip- $ tday'代替。 – 2014-12-02 16:23:30

+0

你应该用你正在使用的语言来标记它。 – Scimonster 2014-12-02 16:25:13

+2

@MarcB:我想你的意思是'netstat _ $ {ip} _ $ tdaydatefile',其中的大括号位于$和变量名之后。 – 2014-12-02 16:52:31

回答

2

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

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

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

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

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

+0

办公室的本地编码惯例是“所有变量名称引用总是包含在'$ {name}'”中。我并不完全热衷于此,但它是系统化的,可以自动修复。 – 2014-12-02 17:00:24

+0

@JonathanLeffler:就我个人而言,我只在技术上必要的时候做这件事,为了扩展字符串的可读性,我只做它,因为花括号很难打字。重新编辑:尽管在这样一个简短的回答中可能不需要,但我发现粗体的关键段落可用于快速引起对帖子*要点的注意;这也是我在创建个人用途笔记时使用的技巧。 – mklement0 2014-12-02 17:11:11

+0

风格很复杂。在我自己的代码中,我主要使用'$ variable'而不是'$ {variable}',但是在工作中规则中有一些智慧。答案格式风格同样复杂,但将大胆保持在最低限度通常是一个好主意 - 但也非常主观。 – 2014-12-02 17:58:30