Bash 命令替换不起作用

Bash 命令替换不起作用

这是脚本:

#!/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 不会扩展单引号中的变量。

相关内容