这是脚本:
#!/bin/bash
thedate=$(date)
var='Current date is $thedate'
echo $var
输出是当前日期是 $thedate,我想让它显示日期,我做错了什么?任何帮助都将不胜感激。
答案1
问题是只bash
扩展环境变量一次,除非您使用eval
,这会导致命令行被解析两次:
eval echo $var
请注意,显示的日期和时间是thedate
设置时的当前日期和时间,而不是$var
引用时的日期和时间。要显示引用时的当前时间$var
,您需要:-
var='Current date is $(date)'
eval echo $var
最好不要使用变量,而是定义一个函数:-
cdate() { echo Current date is $(date); }
...
cdate
当然,最好还是不要使用echo
,而是让它date
自己添加额外的文本:
cdate() { date +"Current date is %c"; }
这不会输出与date
默认格式完全相同的格式,但默认没有格式说明符。
答案2
var='Current date is $thedate'
变量不会在单引号内扩展,因此这会分配一个包含文字文本的字符串$thedate
。您应该在这里使用双引号来扩展变量。
echo $var
此外,这里应该使用双引号将变量括起来,以防止它受到分词和路径名扩展的影响,即echo "$var"
。在这种特殊情况下,您几乎可以不使用引号,因为日期可能不包含通配符。但如果没有引号,例如日期字符串Fri Dec 7 20:41:21 EET 2018
将输出为Fri Dec 7 20:41:21 EET 2018
,也就是说,月份名称后的双空格将折叠为单个空格。
答案3
使用双引号代替单引号。Bash 不会扩展单引号中的变量。