Shell组合变量取值异常排查:为何num4变量无法获取值?
问题分析与解决
你的写法确实存在错误,核心问题出在Shell对变量名的解析规则上:Shell会尽可能匹配最长的合法变量名(由字母、数字、下划线组成),所以你写的$dir_$2_$3_$date里,Shell会把dir_当成一个完整的变量名,而不是$dir加上下划线。如果dir_这个变量没定义,这部分就会是空值,自然num4无法得到你预期的组合值。
修正方法
用**大括号{}**把变量名包裹起来,明确界定变量的边界,让Shell准确识别每个独立变量:
# 正确拼接变量与下划线 num4=${dir}_${2}_${3}_${date} # mv命令里的变量也需要同样修正,避免解析错误 mv test.tar ${dir}${2}_${3}_${date} var=$1,$2,$3,$4,$HOSE,$syncsvr1,$num4 echo $var > value.txt
这样Shell就能精准识别$dir、$2、$3、$date这些变量,将它们和下划线拼接成你想要的字符串。
内容的提问来源于stack exchange,提问作者Kelvinpogs
相关产品推荐
相关产品推荐

