Linux Bash-使用字符串变量创建字符串

Linux Bash-使用字符串变量创建字符串,linux,string,bash,Linux,String,Bash,我有一个名为CURRENTDATE=20151105的变量 我想创建一个字符串,如下所示: abc_20151105_20151105 我尝试了以下变化: echo "abc_$CURRENTDATE_$CURRENTDATE" This gave abc_20151105 echo "abc_'$CURRENTDATE'_'$CURRENTDATE'" This gave abc_'20151105'_'20151105' 我错过了什么?提前谢谢 问题在于下划线是变量名的有效字符。请尝试

我有一个名为CURRENTDATE=20151105的变量

我想创建一个字符串,如下所示:

abc_20151105_20151105

我尝试了以下变化:

echo "abc_$CURRENTDATE_$CURRENTDATE" 
This gave abc_20151105

echo "abc_'$CURRENTDATE'_'$CURRENTDATE'"
This gave abc_'20151105'_'20151105'

我错过了什么?提前谢谢

问题在于下划线是变量名的有效字符。请尝试以下方法之一:

echo "abc_"$CURRENT_DATE"_"$CURRENT_DATE
echo "abc_${CURRENT_DATE}_$CURRENT_DATE"

Bash没有连接运算符,因此可以通过在命令中将字符串粉碎在一起来连接字符串;这就是第一个示例所做的。第二个使用大括号明确指出变量名。

必须用${}包围变量名,以便将其与其他有效字符隔离开来。像这样:

echo "abc_${CURRENT_DATE}_${CURRENT_DATE}"

第一个版本尝试使用
CURRENTDATE\u
变量。使用
${CURRENTDATE}
。第二个版本完全符合您的期望,即展开变量并保留单引号不变。正如Etan指出的,它第一次展开的变量名后面附加了一个下划线。你可以使用他的建议或使用\like so
echo abc\u$CURRENT\u DATE\\u$CURRENT\u DATE
我也发现了这一点——值得一读。你甚至可以用引号分开<代码>回显“abc\$CURRENTDATE”“\$CURRENTDATE”。也就是说,我几乎在任何可能的时候都使用花括号,以减少未知量。我也更喜欢printf<代码>打印'abc\%s\%s\n'$CURRENTDATE'$CURRENTDATE'