Unix Bash脚本生成XML文件时变量未替换问题求助
解决Bash脚本生成XML时变量不替换的问题
问题出在你使用了<< 'EOF'的写法——单引号包裹的EOF会让Shell将分界符内的内容原样输出,不会解析其中的变量、命令替换等,所以$getTheDate没有被替换成实际日期。
修复方案
去掉EOF两侧的单引号,改用无引号的<< EOF,这样Shell会正常解析变量:
#!/bin/bash getTheDate=$( date | awk '{print $1, $2, $3, $4, $5}' ) cat > /Users/Admin/Desktop/changeFile.xml << EOF <?xml version="1.0" encoding="UTF-8"?> <changeData> <Applied>"$getTheDate"</Applied> <Info>The data was changed successfully</Info> </changeData> EOF
优化建议
可以直接用date命令的格式化参数替代awk处理,更高效简洁:
#!/bin/bash # 用date内置格式化生成目标日期字符串 getTheDate=$(date "+%a %d %b %Y %T") cat > /Users/Admin/Desktop/changeFile.xml << EOF <?xml version="1.0" encoding="UTF-8"?> <changeData> <Applied>"$getTheDate"</Applied> <Info>The data was changed successfully</Info> </changeData> EOF
其中date格式化参数的含义:
%a:缩写星期名称(如Thu)%d:两位数字日期(如09,若要单个数字可改用%e)%b:缩写月份名称(如Feb)%Y:四位年份%T:24小时制时间(HH:MM:SS)
内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

