Bash字符串拼接时部分内容丢失的原因咨询
Bash字符串拼接时部分内容丢失的原因咨询
嗨,你这是踩了Bash变量名解析规则的小坑啦,咱们一步步拆解来搞懂原因:
首先,Bash里的变量名允许包含字母、数字和下划线(_),当你写$iDate_$iTime的时候,Bash会把iDate_当成一个完整的变量名来解析——但你之前根本没定义过名为iDate_的变量,所以它展开后就是空字符串,最后自然就只剩下$iTime的值1510了。
对照你的代码具体看:
iDate='2023-10-14' iTime='1510' # 错误写法:Bash会识别变量名为iDate_,而非iDate iDate="$iDate_$iTime" echo $iDate # 输出:1510
而你改成iDate="$iDate"_"$iTime"后能得到正确结果,是因为你把变量iDate、普通字符_、变量iTime明确拆分开了,Bash能清晰识别每个部分的边界,自然就拼接出了你想要的2023-10-14_1510。
另外还有个更通用的写法,用大括号把变量名括起来,也能彻底避免这种歧义,比如:
iDate="${iDate}_${iTime}" echo $iDate # 输出:2023-10-14_1510
这种写法在变量后面紧跟其他字符(比如下划线、数字)时特别实用,能明确告诉Bash变量名的起止位置。
备注:内容来源于stack exchange,提问作者Ram Sambamurthy
相关产品推荐
相关产品推荐

